<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    Hi Tagir,<br>
    <br>
    I had already created [1]. Sorry for not sending an update
    yesterday,<br>
    <br>
    Thanks,<br>
    Vicente<br>
    <br>
    [1] <a class="moz-txt-link-freetext" href="https://bugs.openjdk.org/browse/JDK-8369517">https://bugs.openjdk.org/browse/JDK-8369517</a><br>
    <br>
    <div class="moz-cite-prefix">On 10/10/25 09:26, Tagir Valeev wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:CAE+3fjY5ysEDDhybw1o99GRqZSUpBfpzuzQs5dGb3EME4FZuVw@mail.gmail.com">
      
      <div dir="ltr">Here it is:
        <div><br>
        </div>
        <div><a href="https://bugs.openjdk.org/browse/JDK-8369565" moz-do-not-send="true" class="moz-txt-link-freetext">https://bugs.openjdk.org/browse/JDK-8369565</a></div>
        <div><br>
        </div>
        <div>I checked a few random OpenJDK builds I have on my machine,
          and it looks like the behavior was like this since Java 8.</div>
        <div><br>
        </div>
        <div>With best regards,</div>
        <div>Tagir Valeev</div>
      </div>
      <br>
      <div class="gmail_quote gmail_quote_container">
        <div dir="ltr" class="gmail_attr">On Thu, Oct 9, 2025 at 1:46 PM
          Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" moz-do-not-send="true" class="moz-txt-link-freetext">maurizio.cimadamore@oracle.com</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div>
            <div>
              <p style="margin-bottom:19.2px;margin-top:0px">Yes,
                please!</p>
              <p style="margin-bottom:19.2px;margin-top:0px">Thanks<br>
                Maurizio</p>
              <p style="margin-bottom:19.2px;margin-top:0px">On
                09/10/2025 10:18, Tagir Valeev wrote:</p>
              <blockquote type="cite" style="border-color:rgb(119,119,119) rgb(119,119,119) rgb(119,119,119) rgb(114,159,207);border-left-width:2px;border-left-style:solid;color:rgb(119,119,119);column-rule-color:rgb(119,119,119);margin:19.2px 0px;outline-color:rgb(119,119,119);padding-left:16px;padding-right:16px;quotes:none;text-decoration-color:rgb(119,119,119);text-emphasis-color:rgb(119,119,119)">
                <div id="m_-647106579506287976extcontent-0" style="border-color:rgb(119,119,119);color:rgb(119,119,119);column-rule-color:rgb(119,119,119);outline-color:rgb(119,119,119);quotes:none;text-decoration-color:rgb(119,119,119);text-emphasis-color:rgb(119,119,119)">
                  <div dir="ltr">Hello, Maurizio!
                    <div><br>
                    </div>
                    <div>Thank you for clarifying this. Should I file an
                      issue?</div>
                    <div><br>
                    </div>
                    <div>With best regards,</div>
                    <div>Tagir Valeev</div>
                  </div>
                  <br>
                  <div class="gmail_quote">
                    <div dir="ltr" class="gmail_attr">On Thu, Oct 9,
                      2025 at 11:00 AM Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">maurizio.cimadamore@oracle.com</a>>
                      wrote:<br>
                    </div>
                    <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      <div>
                        <p>Hi Tagir!</p>
                        <p>Nice cacth.</p>
                        <p>Here's a slightly different example which
                          reveals a bit more of what's happening:</p>
                        <p>```<br>
                          interface Main {<br>
                              interface X<T> {<br>
                                  X<T> self();<br>
                              }<br>
                          <br>
                              static X<?> makeX() {return null;}<br>
                          <br>
                              static <R> X<R>
                          create(Supplier<? extends R> supplier)
                          {return null;}<br>
                          <br>
                              static X<X<?>> methodRef() {<br>
                                  var s = (String)create(Main::makeX);<br>
                              }<br>
                          <br>
                              static X<X<?>> lambda() {<br>
                                  var s = (String)create(() ->
                          makeX());<br>
                              }<br>
                          }<br>
                          ```</p>
                        <p>This prints:</p>
                        <p>```<br>
                          error: incompatible types: X<X<?>>
                          cannot be converted to String<br>
                                  var s = (String)create(Main::makeX);<br>
                                                        ^<br>
                          error: incompatible types:
                          X<X<CAP#1>> cannot be converted to
                          String<br>
                                  var s = (String)create(() ->
                          makeX());<br>
                                                        ^<br>
                            where CAP#1 is a fresh type-variable:<br>
                              CAP#1 extends Object from capture of ?<br>
                          ```</p>
                        <p>So, the main difference between the two
                          examples is that in the lambda case, the
                          return type of the makeX call is captured. But
                          in the method refreene case no capture occurs.</p>
                        <p>I believe the lambda case works as expected,
                          but the method reference case does not.</p>
                        <p>The JLS mandates a capture of the resolved
                          method return type (JLS 15.13.2, emphasis
                          mine):</p>
                        <p> </p>
                        <blockquote type="cite">A method reference
                          expression is <span><em>congruent</em></span>
                          with a function type if both of the following
                          are true:
                          <div>
                            <ul style="list-style-type:disc">
                              <li>
                                <p>The function type identifies a single
                                  compile-time declaration corresponding
                                  to the reference. </p>
                              </li>
                              <li>
                                <p> One of the following is true: </p>
                                <div>
                                  <ul style="list-style-type:circle">
                                    <li>
                                      <p>The result of the function type
                                        is <code>void</code>. </p>
                                    </li>
                                    <li>
                                      <p> The result of the function
                                        type is <span>R</span>, <b>and
                                          the result of applying capture
                                          conversion (<a href="https://docs.oracle.com/javase/specs/jls/se25/html/jls-5.html#jls-5.1.10" title="5.1.10. Capture Conversion" target="_blank" moz-do-not-send="true">§5.1.10</a>)
                                          to the return type of the
                                          invocation type (<a href="https://docs.oracle.com/javase/specs/jls/se25/html/jls-15.html#jls-15.12.2.6" title="15.12.2.6. Method Invocation Type" target="_blank" moz-do-not-send="true">§15.12.2.6</a>)
                                          of the chosen compile-time
                                          declaration is <span>R</span>'</b>
                                        (where <span>R</span> is the
                                        target type that may be used to
                                        infer <span>R</span>'), and
                                        neither <span>R</span> nor <span>R</span>'
                                        is <code>void</code>, and <span>R</span>'
                                        is compatible with <span>R</span>
                                        in an assignment context. </p>
                                    </li>
                                  </ul>
                                </div>
                              </li>
                            </ul>
                          </div>
                        </blockquote>
                        <p>It seems like javac is missing this capture
                          conversion and, because of that, the behavior
                          of the two examples diverge.</p>
                        <p>Cheers<br>
                          Maurizio<br>
                        </p>
                        <p><br>
                        </p>
                        <p><br>
                        </p>
                        <p><br>
                        </p>
                        <p><br>
                        </p>
                        <div>On 07/10/2025 17:12, Tagir Valeev wrote:<br>
                        </div>
                        <blockquote type="cite">
                          <div dir="ltr">Hello!
                            <div><br>
                            </div>
                            <div>I'm investigating a seemingly weird
                              compilation case. Consider the following
                              Java interface:</div>
                            <div><br>
                            </div>
                            <div>import java.util.function.Supplier;<br>
                              <br>
                              interface Main {<br>
                                  interface X<T> {<br>
                                      X<T> self();<br>
                                  }<br>
                              <br>
                                  static X<?> makeX() {return
                              null;}<br>
                              <br>
                                  static <R> X<R>
                              create(Supplier<? extends R>
                              supplier) {return null;}<br>
                               <br>
                                  static X<X<?>> methodRef()
                              {<br>
                                      return create(Main::makeX).self();<br>
                                  }<br>
                              <br>
                                  static X<X<?>> lambda() {<br>
                                      return create(() ->
                              makeX()).self();<br>
                                  }<br>
                              }</div>
                            <div><br>
                            </div>
                            <div>I expect that either both methods
                              'methodRef' and 'lambda' should be
                              compilable or both should be
                              non-compilable. However, while 'methodRef'
                              compiles, 'lambda' is rejected by compiler
                              (using javac build 25+36-3489):</div>
                            <div><br>
                              Main.java:17: error: incompatible types:
                              X<X<CAP#1>> cannot be
                              converted to X<X<?>><br>
                                      return create(() ->
                              makeX()).self();<br>
                                                                       ^<br>
                                where CAP#1 is a fresh type-variable:<br>
                                  CAP#1 extends Object from capture of ?<br>
                              1 error<br>
                              error: compilation failed</div>
                            <div><br>
                            </div>
                            <div>Could you please help me and clarify
                              whether this is an expected behavior or
                              not?</div>
                            <div><br>
                            </div>
                            <div>With best regards,</div>
                            <div>Tagir Valeev</div>
                          </div>
                        </blockquote>
                      </div>
                    </blockquote>
                  </div>
                </div>
              </blockquote>
            </div>
            <div style="height:0px;width:0px;max-height:0px;max-width:0px;overflow:hidden;font-size:0px;padding:0px;margin:0px" aria-hidden="true" title="MDH:PHA+WWVzLCBwbGVhc2UhPC9wPjxwPlRoYW5rczxicj5NYXVyaXppbzxicj48L3A+PGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAwOS8xMC8yMDI1IDEwOjE4LCBUYWdpciBWYWxlZXYgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDpDQUUrM2ZqWmd5dy1odHdFcnQ5Q3B6c1U0YkRMMzdfY3BFN25XNUF1XzIwMUtxOTJpN1FAbWFpbC5nbWFpbC5jb20iPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyAiPjxkaXYgZGlyPSJsdHIiPkhlbGxvLCZuYnNwO01hdXJpemlvITxkaXY+PGJyPjwvZGl2PjxkaXY+VGhhbmsgeW91IGZvciBjbGFyaWZ5aW5nIHRoaXMuIFNob3VsZCBJIGZpbGUgYW4gaXNzdWU/PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5XaXRoIGJlc3QgcmVnYXJkcyw8L2Rpdj48ZGl2PlRhZ2lyIFZhbGVldjwvZGl2PjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSBnbWFpbF9xdW90ZV9jb250YWluZXIiPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9hdHRyIj5PbiBUaHUsIE9jdCA5LCAyMDI1IGF0IDExOjAw4oCvQU0gTWF1cml6aW8gQ2ltYWRhbW9yZSAmbHQ7PGEgaHJlZj0ibWFpbHRvOm1hdXJpemlvLmNpbWFkYW1vcmVAb3JhY2xlLmNvbSIgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIj5tYXVyaXppby5jaW1hZGFtb3JlQG9yYWNsZS5jb208L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPgoKICAKICA8ZGl2PgogICAgPHA+SGkgVGFnaXIhPC9wPgogICAgPHA+TmljZSBjYWN0aC48L3A+CiAgICA8cD5IZXJlJ3MgYSBzbGlnaHRseSBkaWZmZXJlbnQgZXhhbXBsZSB3aGljaCByZXZlYWxzIGEgYml0IG1vcmUgb2YKICAgICAgd2hhdCdzIGhhcHBlbmluZzo8L3A+CiAgICA8cD5gYGA8YnI+CiAgICAgIGludGVyZmFjZSBNYWluIHs8YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyBpbnRlcmZhY2UgWCZsdDtUJmd0OyB7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgWCZsdDtUJmd0OyBzZWxmKCk7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KICAgICAgPGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgc3RhdGljIFgmbHQ7PyZndDsgbWFrZVgoKSB7cmV0dXJuIG51bGw7fTxicj4KICAgICAgPGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgc3RhdGljICZsdDtSJmd0OyBYJmx0O1ImZ3Q7IGNyZWF0ZShTdXBwbGllciZsdDs/IGV4dGVuZHMgUiZndDsKICAgICAgc3VwcGxpZXIpIHtyZXR1cm4gbnVsbDt9PGJyPgogICAgICA8YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgWCZsdDtYJmx0Oz8mZ3Q7Jmd0OyBtZXRob2RSZWYoKSB7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdmFyIHMgPSAoU3RyaW5nKWNyZWF0ZShNYWluOjptYWtlWCk7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KICAgICAgPGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgc3RhdGljIFgmbHQ7WCZsdDs/Jmd0OyZndDsgbGFtYmRhKCkgezxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHZhciBzID0gKFN0cmluZyljcmVhdGUoKCkgLSZndDsgbWFrZVgoKSk7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KICAgICAgfTxicj4KICAgICAgYGBgPC9wPgogICAgPHA+VGhpcyBwcmludHM6PC9wPgogICAgPHA+YGBgPGJyPgogICAgICBlcnJvcjogaW5jb21wYXRpYmxlIHR5cGVzOiBYJmx0O1gmbHQ7PyZndDsmZ3Q7IGNhbm5vdCBiZSBjb252ZXJ0ZWQKICAgICAgdG8gU3RyaW5nPGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdmFyIHMgPSAoU3RyaW5nKWNyZWF0ZShNYWluOjptYWtlWCk7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgXjxicj4KICAgICAgZXJyb3I6IGluY29tcGF0aWJsZSB0eXBlczogWCZsdDtYJmx0O0NBUCMxJmd0OyZndDsgY2Fubm90IGJlCiAgICAgIGNvbnZlcnRlZCB0byBTdHJpbmc8YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB2YXIgcyA9IChTdHJpbmcpY3JlYXRlKCgpIC0mZ3Q7IG1ha2VYKCkpOzxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IF48YnI+CiAgICAgICZuYnNwOyB3aGVyZSBDQVAjMSBpcyBhIGZyZXNoIHR5cGUtdmFyaWFibGU6PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgQ0FQIzEgZXh0ZW5kcyBPYmplY3QgZnJvbSBjYXB0dXJlIG9mID88YnI+CiAgICAgIGBgYDwvcD4KICAgIDxwPlNvLCB0aGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBleGFtcGxlcyBpcyB0aGF0IGluIHRoZQogICAgICBsYW1iZGEgY2FzZSwgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBtYWtlWCBjYWxsIGlzIGNhcHR1cmVkLiBCdXQgaW4KICAgICAgdGhlIG1ldGhvZCByZWZyZWVuZSBjYXNlIG5vIGNhcHR1cmUgb2NjdXJzLjwvcD4KICAgIDxwPkkgYmVsaWV2ZSB0aGUgbGFtYmRhIGNhc2Ugd29ya3MgYXMgZXhwZWN0ZWQsIGJ1dCB0aGUgbWV0aG9kCiAgICAgIHJlZmVyZW5jZSBjYXNlIGRvZXMgbm90LjwvcD4KICAgIDxwPlRoZSBKTFMgbWFuZGF0ZXMgYSBjYXB0dXJlIG9mIHRoZSByZXNvbHZlZCBtZXRob2QgcmV0dXJuIHR5cGUKICAgICAgKEpMUyAxNS4xMy4yLCBlbXBoYXNpcyBtaW5lKTo8L3A+CiAgICA8cD4KICAgICAgPC9wPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPkEgbWV0aG9kIHJlZmVyZW5jZSBleHByZXNzaW9uIGlzIDxzcGFuPjxlbT5jb25ncnVlbnQ8L2VtPjwvc3Bhbj4gd2l0aCBhIGZ1bmN0aW9uCiAgICAgICAgdHlwZSBpZiBib3RoIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOmRpc2MiPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHR5cGUgaWRlbnRpZmllcyBhCiAgICAgICAgICAgICAgICBzaW5nbGUgY29tcGlsZS10aW1lIGRlY2xhcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAgICAgICAgICAgICAgICByZWZlcmVuY2UuIDwvcD4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgIDxwPiZuYnNwO09uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6IDwvcD4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6Y2lyY2xlIj4KICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxwPlRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICB0eXBlIGlzIDxjb2RlPnZvaWQ8L2NvZGU+LiA8L3A+CiAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8cD4mbmJzcDtUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgdHlwZSBpcyA8c3Bhbj5SPC9zcGFuPiwgPGI+YW5kIHRoZQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgb2YgYXBwbHlpbmcgY2FwdHVyZSBjb252ZXJzaW9uICg8YSBocmVmPSJodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2Uvc3BlY3MvamxzL3NlMjUvaHRtbC9qbHMtNS5odG1sI2pscy01LjEuMTAiIHRpdGxlPSI1LjEuMTAuJm5ic3A7Q2FwdHVyZSBDb252ZXJzaW9uIiB0YXJnZXQ9Il9ibGFuayIgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIj7CpzUuMS4xMDwvYT4pCiAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgaW52b2NhdGlvbiB0eXBlICg8YSBocmVmPSJodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2Uvc3BlY3MvamxzL3NlMjUvaHRtbC9qbHMtMTUuaHRtbCNqbHMtMTUuMTIuMi42IiB0aXRsZT0iMTUuMTIuMi42LiZuYnNwO01ldGhvZCBJbnZvY2F0aW9uIFR5cGUiIHRhcmdldD0iX2JsYW5rIiBtb3otZG8tbm90LXNlbmQ9InRydWUiPsKnMTUuMTIuMi42PC9hPikKICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNob3NlbiBjb21waWxlLXRpbWUgZGVjbGFyYXRpb24gaXMgPHNwYW4+Ujwvc3Bhbj4nPC9iPiAod2hlcmUgPHNwYW4+Ujwvc3Bhbj4gaXMgdGhlIHRhcmdldCB0eXBlIHRoYXQKICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSB1c2VkIHRvIGluZmVyIDxzcGFuPlI8L3NwYW4+JyksCiAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVpdGhlciA8c3Bhbj5SPC9zcGFuPiBub3IgPHNwYW4+Ujwvc3Bhbj4nIGlzIDxjb2RlPnZvaWQ8L2NvZGU+LAogICAgICAgICAgICAgICAgICAgICAgYW5kIDxzcGFuPlI8L3NwYW4+JyBpcyBjb21wYXRpYmxlCiAgICAgICAgICAgICAgICAgICAgICB3aXRoIDxzcGFuPlI8L3NwYW4+IGluIGFuIGFzc2lnbm1lbnQKICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuIDwvcD4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2Jsb2NrcXVvdGU+CiAgICAKICAgIDxwPkl0IHNlZW1zIGxpa2UgamF2YWMgaXMgbWlzc2luZyB0aGlzIGNhcHR1cmUgY29udmVyc2lvbiBhbmQsCiAgICAgIGJlY2F1c2Ugb2YgdGhhdCwgdGhlIGJlaGF2aW9yIG9mIHRoZSB0d28gZXhhbXBsZXMgZGl2ZXJnZS48L3A+CiAgICA8cD5DaGVlcnM8YnI+CiAgICAgIE1hdXJpemlvPGJyPgogICAgPC9wPgogICAgPHA+PGJyPgogICAgPC9wPgogICAgPHA+PGJyPgogICAgPC9wPgogICAgPHA+PGJyPgogICAgPC9wPgogICAgPHA+PGJyPgogICAgPC9wPgogICAgPGRpdj5PbiAwNy8xMC8yMDI1IDE3OjEyLCBUYWdpciBWYWxlZXYKICAgICAgd3JvdGU6PGJyPgogICAgPC9kaXY+CiAgICA8YmxvY2txdW90ZSB0eXBlPSJjaXRlIj4KICAgICAgCiAgICAgIDxkaXYgZGlyPSJsdHIiPkhlbGxvIQogICAgICAgIDxkaXY+PGJyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+SSdtIGludmVzdGlnYXRpbmcgYSBzZWVtaW5nbHkgd2VpcmQgY29tcGlsYXRpb24gY2FzZS4KICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgSmF2YSBpbnRlcmZhY2U6PC9kaXY+CiAgICAgICAgPGRpdj48YnI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdj5pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlN1cHBsaWVyOzxicj4KICAgICAgICAgIDxicj4KICAgICAgICAgIGludGVyZmFjZSBNYWluIHs8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7IGludGVyZmFjZSBYJmx0O1QmZ3Q7IHs8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgWCZsdDtUJmd0OyBzZWxmKCk7PGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyB9PGJyPgogICAgICAgICAgPGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyBzdGF0aWMgWCZsdDs/Jmd0OyBtYWtlWCgpIHtyZXR1cm4gbnVsbDt9PGJyPgogICAgICAgICAgPGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyBzdGF0aWMgJmx0O1ImZ3Q7IFgmbHQ7UiZndDsgY3JlYXRlKFN1cHBsaWVyJmx0Oz8gZXh0ZW5kcwogICAgICAgICAgUiZndDsgc3VwcGxpZXIpIHtyZXR1cm4gbnVsbDt9PGJyPgogICAgICAgICAgJm5ic3A7PGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyBzdGF0aWMgWCZsdDtYJmx0Oz8mZ3Q7Jmd0OyBtZXRob2RSZWYoKSB7PGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHJldHVybiBjcmVhdGUoTWFpbjo6bWFrZVgpLnNlbGYoKTs8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7IH08YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7IHN0YXRpYyBYJmx0O1gmbHQ7PyZndDsmZ3Q7IGxhbWJkYSgpIHs8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmV0dXJuIGNyZWF0ZSgoKSAtJmd0OyBtYWtlWCgpKS5zZWxmKCk7PGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyB9PGJyPgogICAgICAgICAgfTwvZGl2PgogICAgICAgIDxkaXY+PGJyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+SSBleHBlY3QgdGhhdCBlaXRoZXIgYm90aCBtZXRob2RzICdtZXRob2RSZWYnIGFuZCAnbGFtYmRhJwogICAgICAgICAgc2hvdWxkIGJlIGNvbXBpbGFibGUgb3IgYm90aCBzaG91bGQgYmUgbm9uLWNvbXBpbGFibGUuCiAgICAgICAgICBIb3dldmVyLCB3aGlsZSAnbWV0aG9kUmVmJyBjb21waWxlcywgJ2xhbWJkYScgaXMgcmVqZWN0ZWQgYnkKICAgICAgICAgIGNvbXBpbGVyICh1c2luZyBqYXZhYyZuYnNwO2J1aWxkIDI1KzM2LTM0ODkpOjwvZGl2PgogICAgICAgIDxkaXY+PGJyPgogICAgICAgICAgTWFpbi5qYXZhOjE3OiBlcnJvcjogaW5jb21wYXRpYmxlIHR5cGVzOgogICAgICAgICAgWCZsdDtYJmx0O0NBUCMxJmd0OyZndDsgY2Fubm90IGJlIGNvbnZlcnRlZCB0bwogICAgICAgICAgWCZsdDtYJmx0Oz8mZ3Q7Jmd0Ozxicj4KICAgICAgICAgICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyByZXR1cm4gY3JlYXRlKCgpIC0mZ3Q7IG1ha2VYKCkpLnNlbGYoKTs8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO148YnI+CiAgICAgICAgICAmbmJzcDsgd2hlcmUgQ0FQIzEgaXMgYSBmcmVzaCB0eXBlLXZhcmlhYmxlOjxicj4KICAgICAgICAgICZuYnNwOyAmbmJzcDsgQ0FQIzEgZXh0ZW5kcyBPYmplY3QgZnJvbSBjYXB0dXJlIG9mID88YnI+CiAgICAgICAgICAxIGVycm9yPGJyPgogICAgICAgICAgZXJyb3I6IGNvbXBpbGF0aW9uIGZhaWxlZDwvZGl2PgogICAgICAgIDxkaXY+PGJyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+Q291bGQgeW91IHBsZWFzZSBoZWxwIG1lIGFuZCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyBhbgogICAgICAgICAgZXhwZWN0ZWQgYmVoYXZpb3Igb3Igbm90PzwvZGl2PgogICAgICAgIDxkaXY+PGJyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+V2l0aCBiZXN0IHJlZ2FyZHMsPC9kaXY+CiAgICAgICAgPGRpdj5UYWdpciBWYWxlZXY8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Jsb2NrcXVvdGU+CiAgPC9kaXY+Cgo8L2Jsb2NrcXVvdGU+PC9kaXY+Cgo8L2Jsb2NrcXVvdGU+PHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IHRleHRjb21wbGV0ZS1kcm9wZG93biIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogMTAwMDsiIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiIHBvcG92ZXI9ImF1dG8iPjwvdWw+">&#8203;</div>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>