<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">Hi, </div><div class=""><br class=""></div><div class="">thank you for comments and references. I didn’t mean we should create special self-type. The proposed syntax:</div><div class=""><br class=""></div><div class=""><span style="font-style: normal;" class=""><font face="Courier New" class="">  public <b class="">this</b> hello() {}</font></span></div><div class=""><br class=""></div><div class="">doesn’t mean “<i class="">returns an object of the same type as my class</i>”.</div><div class=""><br class=""></div><div class="">but rather</div><div class=""><br class=""></div><div class="">“<i class="">returns the same instance it is called on</i>”. The fact that it is also the same type is a useful byproduct. Please note that I used lowercase T to emphasize it is the instance not type.</div><div class=""><br class=""></div><div class="">Under the hood nothing has to be returned (on the call stack) and the method should compile to:</div><div class=""><br class=""></div><div class=""><font face="Courier New" class="">  public <b class="">void</b> hello() {}</font></div><div class=""><br class=""></div><div class="">That’s why using <font face="Courier New" class="">this</font> (ThisClass/MyClass) in method arguments or other places doesn’t make sense to me. (Passing the same instance to method which already has <font face="Courier New" class="">this</font> reference.) It also doesn’t make sense (or little) to use it on static methods like:</div><div class=""><br class=""></div><div class=""><font face="Courier New" class="">  public <b class="">static this</b> hello();</font></div><div class=""><br class=""></div><div class=""><b class="">Ad Generics) </b>As you pointed out it doesn’t work well with deep class hierarchy and also reduces readability (adds boilerplate). Imagine for example big library representing UI (like DOM structure):</div><div class=""><br class=""></div><div class=""><font face="Courier New" class="">UIElement<span class="Apple-tab-span" style="white-space:pre">   </span>// method css(…) here</font></div><div class=""><font face="Courier New" class="">    UILayout</font></div><div class=""><font face="Courier New" class="">        UIGridLayout</font></div><div class=""><font face="Courier New" class="">            …</font></div><div class=""><font face="Courier New" class="">    UIFormElement</font></div><div class=""><font face="Courier New" class="">        UISelect</font></div><div class=""><font face="Courier New" class="">            UIMultiSelect…<span class="Apple-tab-span" style="white-space:pre">       </span>// has method maxSelection()</font></div><div class=""><br class=""></div><div class=""><font face="Courier New" class="">// compilation error</font></div><div class=""><font face="Courier New" class="">var mySelect = new UIMultiSelect().css(„color”, „green”)</font></div><div class=""><font face="Courier New" class=""><span class="Apple-tab-span" style="white-space:pre">       </span>.addClass(„attention”).maxSelection(3);</font></div><div class=""><br class=""></div><div class="">This is basically my use-case. I have 60..100 subclasses.</div><div class=""><br class=""></div><div class=""><b class="">Ad "Is the feature important enough?")</b></div><div class=""><br class=""></div><div class="">Technically all language features are just “a syntactic sugar” to the assembler (bytecode). I lived many years without switch-expressions, try-with-resource,… :-)</div><div class=""><br class=""></div><div class="">All the best,</div><div class="">Tomas</div><div><br class=""><blockquote type="cite" class=""><div class="">13. 6. 2023 v 12:51, Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" class="">maurizio.cimadamore@oracle.com</a>>:</div><br class="Apple-interchange-newline"><div class="">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">
  
  <div class="">
    <div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true"><p style="margin: 0px 0px 1.2em !important;" class="">Hi,<br class="">
        the topic you mention is sometimes known, in type-system
        literature, as “self types”. The topic of adding self types to
        Java was reasearched few years ago (see [1, 2]). While adding
        self-types increases the expressiveness of the language (e.g.
        allowing support for so called “binary methods” - e.g. typing
        methods such as Object::equals correctly), such extension makes
        the language unsound. Given this declaration (which I borrow
        from the cited paper):</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;" class=""><code class="language-java hljs" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248) none repeat scroll 0% 0%; -moz-text-size-adjust: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">class</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">Node</span> </span>{
    ...
    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">public</span> <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">void</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;">setNext</span><span class="hljs-params">(ThisClass next)</span> </span>{ ... }
}
</code></pre><p style="margin: 0px 0px 1.2em !important;" class="">And given the
        following generic method declaration:</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;" class=""><code class="language-java hljs" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248) none repeat scroll 0% 0%; -moz-text-size-adjust: none;"><span class="hljs-function"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">static</span> <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">void</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;">setNextStatic</span><span class="hljs-params">(Node node1, Node node2)</span> </span>{
      node1.setNext(node2); <span class="hljs-comment" style="color: rgb(153, 153, 136); font-style: italic;">// whooops</span>
}
</code></pre><p style="margin: 0px 0px 1.2em !important;" class="">Here we have an
        issue, because it is now possible to pass two instances of Node
        with different “self types”, and this program would still
        type-check. In other words, subtyping here works against us -
        because I can declare some subclass of Node, e.g. MyColoredNode
        <: Node, and then call <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;" class="">setNextStatic(new Node(), new MyColoredNode())</code>,
        which clearly violates the specification of Node::setNext, but
        the type system is not powerful enough to detect that.</p><p style="margin: 0px 0px 1.2em !important;" class="">Typically this
        tension is resolved by adding support for so called “exact
        types” (denoted as @T). A variable with an exact type guarantees
        that it can only ever hold values that are the same as its
        static type. So, e.g. assigning a MyColoredNode object to a
        variable of type @Node would fail. Equipped with this new
        weapon, we can go back and change the declaration of setNext to:</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;" class=""><code class="language-java hljs" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248) none repeat scroll 0% 0%; -moz-text-size-adjust: none;">    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">public</span> <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">void</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;">setNext</span><span class="hljs-params">(@ThisClass next)</span> </span>{ ... }
</code></pre><p style="margin: 0px 0px 1.2em !important;" class="">Which makes things
        sound again.</p><p style="margin: 0px 0px 1.2em !important;" class="">This is a common tale
        when coming up with new language ideas - e.g. we start from a
        relatively constrained problems (e.g. how to better express
        covariant returns, in a way that doesn’t force us to re-override
        a method in all subclasses?) and we find something that works.
        Then we see what happens if we use the same construct in places
        we did not anticipate (in this case, usage of <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;" class="">this</code>
        type in parameter position) and see what happens. Almost every
        non-trivial type-system extension I’ve been working with in the
        past 15 years starts showing some kind of subtle interactions
        when looked at it that way. And “this” is no exception.</p><p style="margin: 0px 0px 1.2em !important;" class="">At which point the
        question becomes: is the feature important enough to either (a)
        swallow the cost of any other dependent feature it brings about
        (e.g. exact @ types), or (b) restrict the usage of the feature
        only in the places where it is well behaved (e.g. return
        position) ? The former has a complexity cost (introduction of a
        new kind of type), whereas the latter has an irregularity cost
        (e.g. the new types can only be used in few selected places). My
        (subjective) judgment is that, in this case the feature you
        propose is not worth paying any of these costs, given that there
        are some alternatives to achieve the same thing.</p><p style="margin: 0px 0px 1.2em !important;" class="">On that subject, one
        alternative you have left out in your description is to use the
        generic type system to implement a poor man “self type” - e.g.</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;" class=""><code class="language-java hljs" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248) none repeat scroll 0% 0%; -moz-text-size-adjust: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">class</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">Foo</span><<span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">T</span> <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">extends</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">Foo</span><<span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">T</span>>> </span>{
    <span class="hljs-function">T <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;">get</span><span class="hljs-params">()</span></span>;
}

<span class="hljs-class"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">class</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">SubFoo</span> <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">extends</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">Foo</span><<span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">SubFoo</span>> </span>{ }
</code></pre><p style="margin: 0px 0px 1.2em !important;" class="">This is not perfect
        (especially when working with complex class hierarchies) but I
        have seen this technique used with success many times (e.g. in
        the implementation of the Stream API itself).</p><p style="margin: 0px 0px 1.2em !important;" class="">Cheers<br class="">
        Maurizio</p><p style="margin: 0px 0px 1.2em !important;" class="">[1] - <a href="https://link.springer.com/chapter/10.1007/978-3-540-24851-4_18" class="moz-txt-link-freetext">https://link.springer.com/chapter/10.1007/978-3-540-24851-4_18</a><br class="">
        [2] - <a href="https://www.sciencedirect.com/science/article/pii/S0167642313000038" class="moz-txt-link-freetext">https://www.sciencedirect.com/science/article/pii/S0167642313000038</a></p><p style="margin: 0px 0px 1.2em !important;" class="">On 09/06/2023 17:35,
        Tomáš Bleša wrote:</p><div style="margin: 0px 0px 1.2em !important;" class=""><br class="webkit-block-placeholder"></div>
      <div class="markdown-here-exclude"><div class=""><br class="webkit-block-placeholder"></div>
        <blockquote type="cite" cite="mid:F22932E5-A7E4-4825-99E1-995B3FDF0CFD@anneca.cz" class="">
          
          <div class="" style="font-family: HelveticaNeue;"><font class="" color="#929292"><i class="">/* I sent the
                following to discuss@ mailing list yesterday. (wrong
                list for the topic) I hope this will be more appropriate
                mailing list */</i></font></div>
          <div class="" style="font-family: HelveticaNeue;"><br class="">
          </div>
          <div class="" style="font-family: HelveticaNeue;">Hi all,</div>
          <div class="" style="font-family: HelveticaNeue;"><br class="">
          </div>
          <span style="font-family: HelveticaNeue;" class="">this is a
            request for feedback on a topic that has been on my mind for
            a few weeks. I have written a short document in JEP format
            and would like to ask you to comment if you find the
            described proposal useful.</span>
          <div class="" style="font-family: HelveticaNeue;"><br class="">
          </div>
          <div class="" style="font-family: HelveticaNeue;">Thanks,</div>
          <div class="" style="font-family: HelveticaNeue;">Tomas Blesa</div>
          <div class="" style="font-family: HelveticaNeue;">__________________________________</div>
          <div class="" style="font-family: HelveticaNeue;"><br class="">
          </div>
          <div class="">
            <div class=""><font class="" face="HelveticaNeue">Summary</font></div>
            <div class=""><font class="" face="HelveticaNeue">-------</font></div>
            <div class=""><font class="" face="HelveticaNeue">Enhance
                the Java language syntax to better support the method
                chaining (named parameter idiom) programming pattern.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Goals</font></div>
            <div class=""><font class="" face="HelveticaNeue">-----</font></div>
            <div class=""><font class="" face="HelveticaNeue">The
                primary goal is to remove unnecessary boilerplate code
                in class methods designed for type-safe chained calls,
                especially when combined with inheritance.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Motivation</font></div>
            <div class=""><font class="" face="HelveticaNeue">----------</font></div>
            <div class=""><font class="" face="HelveticaNeue">[Method
                chaining](<a href="https://en.wikipedia.org/wiki/Method_chaining" class="moz-txt-link-freetext" moz-do-not-send="true">https://en.wikipedia.org/wiki/Method_chaining</a>)
                is a widely used and popular programming pattern,
                particularly in creating libraries (APIs) or
                configuration objects. Programmers can easily create a
                method that returns `this` with a method signature that
                specifies the returning type of the containing class.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                Shape scale(double ratio) {</font></div>
            <div class=""><font class="" face="HelveticaNeue">        //
                recalculate all points</font></div>
            <div class=""><font class="" face="HelveticaNeue">       
                return this;</font></div>
            <div class=""><font class="" face="HelveticaNeue">    }</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">The
                problem arises when we combine this pattern with
                inheritance. We can lose type information when calling
                the method on a subclass. For example, let's create two
                subclasses of the `Shape` superclass:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                Rectangle extends Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                Rectangle roundCorners(double pixels) {</font></div>
            <div class=""><font class="" face="HelveticaNeue">        //
                ...</font></div>
            <div class=""><font class="" face="HelveticaNeue">       
                return this;</font></div>
            <div class=""><font class="" face="HelveticaNeue">    }</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                Circle extends Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Now,
                imagine the following piece of code using the
                mini-library above:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">var myRect
                = new Rectangle().scale(1.2).roundCorners(10);</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">The code
                won't compile because `scale()` returns the type
                `Shape`, which doesn't have the `roundCorners` method.
                There is also a problem even without the final
                `roundCorners()` call:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">var myRect
                = new Rectangle().scale(1.2);</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">The
                inferred type of `myRect` is `Shape` and not
                `Rectangle`, so the following line will also be invalid:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">myRect.roundCorners(10);</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Straightforward
                solutions to the problem could be:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">1)
                Override the `scale()` method in all subclasses and
                change the return type:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                Rectangle extends Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue">    // ...</font></div>
            <div class=""><font class="" face="HelveticaNeue">   
                @Override</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                Rectangle scale(double ratio) {</font></div>
            <div class=""><font class="" face="HelveticaNeue">       
                super.scale(ratio);</font></div>
            <div class=""><font class="" face="HelveticaNeue">       
                return this;</font></div>
            <div class=""><font class="" face="HelveticaNeue">    }    
                  </font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">2) Split
                object construction and method calls:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">var myRect
                = new Rectangle();</font></div>
            <div class=""><font class="" face="HelveticaNeue">myRect.scale(1.2);</font></div>
            <div class=""><font class="" face="HelveticaNeue">myRect.roundCorners(10);</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">3) Partial
                solution - reorder chained calls (if possible):</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">var myRect
                = new Rectangle();</font></div>
            <div class=""><font class="" face="HelveticaNeue">myRect.roundCorners(10).scale(1.2);
                // roundCorners called first</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">All of
                these solutions add unnecessary lines of code, and as
                the library of shapes grows, keeping the desired return
                type will introduce more and more boilerplate code.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Description</font></div>
            <div class=""><font class="" face="HelveticaNeue">-----------</font></div>
            <div class=""><font class="" face="HelveticaNeue">The
                proposed solution to the problem described in the
                previous section is to extend the Java syntax for the
                returned type in method signatures:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                this scale(double ratio) { // <=== returns this</font></div>
            <div class=""><font class="" face="HelveticaNeue">        //
                recalculate all points</font></div>
            <div class=""><font class="" face="HelveticaNeue">       
                return this;</font></div>
            <div class=""><font class="" face="HelveticaNeue">    }</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Methods
                declared or defined as returning `this` can only return
                the instance on which they are called. The following
                code will be type-safe and perfectly valid:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">var myRect
                =                     // inferred Rectangle type</font></div>
            <div class=""><font class="" face="HelveticaNeue">    new
                Rectangle()              // returns Rectangle instance</font></div>
            <div class=""><font class="" face="HelveticaNeue">   
                .scale(1.2)                  // returns Rectangle
                instance</font></div>
            <div class=""><font class="" face="HelveticaNeue">   
                .roundCorners(10);           // returns Rectangle
                instance</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">The
                constructed type `Rectangle` is preserved throughout the
                entire call chain.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">It is
                possible to override methods returning `this`, but the
                subclass' implementation must also be declared with the
                `this` keyword instead of a concrete returning type.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">It is even
                possible to remove the explicit return statement
                altogether:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                this scale(double ratio) {</font></div>
            <div class=""><font class="" face="HelveticaNeue">        //
                recalculate all points</font></div>
            <div class=""><font class="" face="HelveticaNeue">    }</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Or simply
                remove the value `this` from the return statement:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                this scale(double ratio) {</font></div>
            <div class=""><font class="" face="HelveticaNeue">        //
                recalculate all points</font></div>
            <div class=""><font class="" face="HelveticaNeue">        if
                (condition) return;         // <== automatically
                returns this</font></div>
            <div class=""><font class="" face="HelveticaNeue">        //
                do something else</font></div>
            <div class=""><font class="" face="HelveticaNeue">    }</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">In fact,
                methods returning `this` can be compiled to the same
                bytecode as methods returning `void`. This is because
                the instance reference (and the returned value) is
                already known to the caller, eliminating the need to
                pass that value back through the call stack. As a
                result, both CPU cycles and memory are saved.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">In the
                Java world, it is common to create getters and setters
                according to the Java Beans specification in the form of
                `getProperty`/`setProperty` pairs or
                `isProperty`/`setProperty`. Setters are defined as
                returning `void`. These setters can be more useful if
                defined as returning `this`:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                Customer {</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                this setFirstname() { ... }</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                this setSurname() { ... }</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                this setEmail() { ... }</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">This
                allows for more concise usage when constructing and
                configuring an instance without adding more code:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">customers.add(</font></div>
            <div class=""><font class="" face="HelveticaNeue">    new
                Customer()</font></div>
            <div class=""><font class="" face="HelveticaNeue">       
                .setFirstname(resultSet.getString(1))</font></div>
            <div class=""><font class="" face="HelveticaNeue">       
                .setSurname(resultSet.getString(2))</font></div>
            <div class=""><font class="" face="HelveticaNeue">       
                .setEmail(resultSet.getString(3))</font></div>
            <div class=""><font class="" face="HelveticaNeue">);</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">It is also
                possible to declare an interface with methods returning
                `this`:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">interface
                Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue">    this
                scale(double ratio);</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">In this
                case, all implementing classes must define the method as
                returning `this`.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">The
                proposed syntax is a bit less useful for enums or
                records, as neither of them allows for inheritance. But
                enums and records can also implement interfaces and for
                this reason and for overall consistency, "return this"
                syntax should be allowed for enums and records.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">To
                accommodate the syntax with the Java Reflection API, it
                will probably be required to create a special final
                placeholder class `This` (with an uppercase "T"),
                similar to `java.lang.Void`.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Alternatives</font></div>
            <div class=""><font class="" face="HelveticaNeue">------------</font></div>
            <div class=""><font class="" face="HelveticaNeue">It is
                probably possible to help auto-generate overriding
                methods in subclasses using annotation processing, but
                this option wasn't fully explored. However, such an
                approach would add extra unnecessary code to compiled
                subclasses and go against the primary goal of reducing
                boilerplate.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Risks and
                Assumptions</font></div>
            <div class=""><font class="" face="HelveticaNeue">---------------------</font></div>
            <div class=""><font class="" face="HelveticaNeue">The
                proposed syntax is likely to break the compatibility of
                library-dependent code whose author decides to switch to
                the "return this" syntax between versions.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Older code
                that looks like this:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                MyUglyShape extends Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue">   
                @Override</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                MyUglyShape scale(double ratio) {</font></div>
            <div class=""><font class="" face="HelveticaNeue">       
                return this;</font></div>
            <div class=""><font class="" face="HelveticaNeue">    }</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">will have
                to be rewritten as:</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                MyUglyShape extends Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue">   
                @Override</font></div>
            <div class=""><font class="" face="HelveticaNeue">    public
                this scale(double ratio) {    // signature change</font></div>
            <div class=""><font class="" face="HelveticaNeue">        //
                optional removal of the return this statement</font></div>
            <div class=""><font class="" face="HelveticaNeue">    }</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">or </font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">```java</font></div>
            <div class=""><font class="" face="HelveticaNeue">class
                MyUglyShape extends Shape {</font></div>
            <div class=""><font class="" face="HelveticaNeue"><span class="Apple-tab-span" style="white-space:pre"> </span>//
                override removed</font></div>
            <div class=""><font class="" face="HelveticaNeue">}</font></div>
            <div class=""><font class="" face="HelveticaNeue">```</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">This
                problem can be mitigated with the help of smart IDEs
                automatically suggesting such refactoring.</font></div>
            <div class=""><font class="" face="HelveticaNeue"><br class="">
              </font></div>
            <div class=""><font class="" face="HelveticaNeue">Another
                possible risk is breaking old code that relies on the
                Reflection API for scanning the returning types of
                methods.</font></div>
          </div>
        </blockquote><div class=""><br class="webkit-block-placeholder"></div>
      </div><div style="margin: 0px 0px 1.2em !important;" class=""><br class="webkit-block-placeholder"></div>
      <div title="MDH:PHA+SGksPGJyPnRoZSB0b3BpYyB5b3UgbWVudGlvbiBpcyBzb21ldGltZXMga25vd24sIGluIHR5cGUtc3lzdGVtIGxpdGVyYXR1cmUsIGFzICJzZWxmIHR5cGVzIi4gVGhlIHRvcGljIG9mIGludGVn
cmF0aW5nIHNlbGYgdHlwZXMgaW50byBKYXZhIHdhcyByZWFzZWFyY2hlZCBmZXcgeWVhcnMgYWdv
IChzZWUgWzEsIDJdKS4gV2hpbGUgYWRkaW5nIHNlbGYtdHlwZXMgaW5jcmVhc2VkIHRoZSBleHBy
ZXNzaXZlbmVzcyBvZiB0aGUgbGFuZ3VhZ2UgKGUuZy4gYWxsb3dpbmcgc3VwcG9ydCBmb3Igc28g
Y2FsbGVkICJiaW5hcnkgbWV0aG9kcyIgLSBlLmcuIHR5cGluZyBtZXRob2RzIHN1Y2ggYXMgT2Jq
ZWN0OjplcXVhbHMgY29ycmVjdGx5KSwgdGhlaXIgYWRkaXRpb24gbWFrZXMgdGhlIGxhbmd1YWdl
IHVuc291bmQuIEdpdmVuIHRoaXMgZGVjbGFyYXRpb24gKHdoaWNoIEkgYm9ycm93IGZyb20gdGhl
IGNpdGVkIHBhcGVyKTo8YnI+PC9wPjxwPmBgYGphdmE8YnI+Y2xhc3MgTm9kZSB7PGJyPiZuYnNw
OyZuYnNwOyZuYnNwOyAuLi48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHB1YmxpYyB2b2lkIHNldE5l
eHQoVGhpc0NsYXNzIG5leHQpIHsgLi4uIH08YnI+fTxicj5gYGA8L3A+PHA+QW5kIGdpdmVuIHRo
ZSBmb2xsb3dpbmcgZ2VuZXJpYyBtZXRob2QgZGVjbGFyYXRpb246PC9wPjxwPmBgYGphdmE8YnI+
c3RhdGljIHZvaWQgc2V0TmV4dFN0YXRpYyhOb2RlIG5vZGUxLCBOb2RlIG5vZGUyKSB7PGJyPiZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBub2RlMS5zZXROZXh0KG5vZGUyKTsgLy8gd2hv
b29wczxicj59PGJyPmBgYDwvcD48cD5IZXJlIHdlIGhhdmUgYW4gaXNzdWUsIGJlY2F1c2UgaXQg
aXMgbm93IHBvc3NpYmxlIHRvIHBhc3MgdHdvIGluc3RhbmNlcyBvZiBOb2RlIHdpdGggZGlmZmVy
ZW50ICJzZWxmIHR5cGVzIiwgYW5kIHRoaXMgcHJvZ3JhbSB3b3VsZCBzdGlsbCB0eXBlLWNoZWNr
LiBJbiBvdGhlciB3b3Jkcywgc3VidHlwaW5nIGhlcmUgd29ya3MgYWdhaW5zdCB1cyAtIGJlY2F1
c2UgSSBjYW4gZGVjbGFyZSBzb21lIHN1YmNsYXNzIG9mIE5vZGUsIGUuZy4gTXlDb2xvcmVkTm9k
ZSAmbHQ7OiBOb2RlLCBhbmQgdGhlbiBjYWxsIGBzZXROZXh0U3RhdGljKE5vZGUsIE15Q29sb3Jl
ZE5vZGUpYCwgd2hpY2ggY2xlYXJseSB2aW9sYXRlcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBOb2Rl
OjpzZXROZXh0LCBidXQgdGhlIHR5cGUgc3lzdGVtIGlzIG5vdCBwb3dlcmZ1bCBlbm91Z2ggdG8g
ZGV0ZWN0IHRoYXQuPC9wPjxwPlR5cGljYWxseSB0aGlzIHRlbnNpb24gaXMgcmVzb2x2ZWQgYnkg
YWRkaW5nIHN1cHBvcnQgZm9yIHNvIGNhbGxlZCAiZXhhY3QgdHlwZXMiIChkZW5vdGVkIGFzIEBU
KSAtIHRoYXQgaXMgYSBuZXcgYW5ub3RhdGlvbiB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0
YXRpYyB0eXBlIGFuZCB0aGUgZHluYW1pYyB0eXBlIGFyZSBleGFjdGx5IHRoZSBzYW1lLiBTbywg
ZS5nLiBhc3NpZ25pbmcgYSBNeUNvbG9yZWROb2RlIHRvIGEgQE5vZGUgd291bGQgZmFpbC4gRXF1
aXBwZWQgd2l0aCB0aGlzIG5ldyB3ZWFwb24sIHdlIGNhbiBnbyBiYWNrIGFuZCBjaGFuZ2UgdGhl
IGRlY2xhcmF0aW9uIG9mIHNldE5leHQgdG86PC9wPjxwPmBgYGphdmE8YnI+Jm5ic3A7Jm5ic3A7
Jm5ic3A7IHB1YmxpYyB2b2lkIHNldE5leHQoQFRoaXNDbGFzcyBuZXh0KSB7IC4uLiB9PGJyPmBg
YDwvcD48cD5XaGljaCBtYWtlcyB0aGluZ3Mgc291bmQgYWdhaW4uPC9wPjxwPlRoaXMgaXMgYSBj
b21tb24gdGFsZSB3aGVuIGNvbWluZyB1cCB3aXRoIG5ldyBsYW5ndWFnZSBpZGVhcyAtIGUuZy4g
d2Ugc3RhcnQgZnJvbSBhIHJlbGF0aXZlbHkgY29uc3RyYWluZWQgcHJvYmxlbXMgKGUuZy4gaG93
IHRvIHdlIGJldHRlciBleHByZXNzIGNvdmFyaWFudCByZXR1cm5zLCBpbiBhIHdheSB0aGF0IGRv
ZXNuJ3QgZm9yY2UgdXMgdG8gcmUtb3ZlcnJpZGUgYSBtZXRob2QgaW4gYWxsIHN1YmNsYXNzZXM/
KSBhbmQgd2UgZmluZCBzb21ldGhpbmcgdGhhdCB3b3Jrcy4gVGhlbiB3ZSBzZWUgd2hhdCBoYXBw
ZW5zIGlmIHdlIHVzZSB0aGUgc2FtZSBjb25zdHJ1Y3QgaW4gcGxhY2VzIHdlIGRpZCBub3QgYW50
aWNpcGF0ZSAoaW4gdGhpcyBjYXNlLCB1c2FnZSBvZiBgdGhpc2AgdHlwZSBpbiBwYXJhbWV0ZXIg
cG9zaXRpb24pIGFuZCBzZWUgd2hhdCBoYXBwZW5zLiBBbG1vc3QgZXZlcnkgbm9uLXRyaXZpYWwg
dHlwZS1zeXN0ZW0gZXh0ZW5zaW9uIEkndmUgYmVlbiB3b3JraW5nIHdpdGggaW4gdGhlIHBhc3Qg
MTUgeWVhcnMgc3RhcnRzIHNob3dpbmcgc29tZSBraW5kIG9mIHN1YnRsZSBpbnRlcmFjdGlvbnMg
d2hlbiBsb29rZWQgYXQgaXQgdGhhdCB3YXkuIEFuZCAidGhpcyIgaXMgbm8gZXhjZXB0aW9uLjwv
cD48cD5BdCB3aGljaCBwb2ludCB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgdGhlIGZlYXR1cmUg
aW1wb3J0YW50IGVub3VnaCB0byBlaXRoZXIgKGEpIHN3YWxsb3cgdGhlIGNvc3Qgb2YgYW55IG90
aGVyIGRlcGVuZGVudCBmZWF0dXJlIGl0IGJyaW5ncyBhYm91dCAoZS5nLiBleGFjdCBAIHR5cGVz
KSwgb3IgKGIpIHJlc3RyaWN0IHRoZSB1c2FnZSBvZiB0aGUgZmVhdHVyZSBvbmx5IGluIHRoZSBw
bGFjZXMgd2hlcmUgaXQgaXMgd2VsbCBiZWhhdmVkIChlLmcuIHJldHVybiBwb3NpdGlvbikgPyBU
aGUgZm9ybWVyIGhhcyBhIGNvbXBsZXhpdHkgY29zdCAoaW50cm9kdWN0aW9uIG9mIGEgbmV3IGtp
bmQgb2YgdHlwZSksIHdoZXJlYXMgdGhlIGxhdHRlciBoYXMgYW4gaXJyZWd1bGFyaXR5IGNvc3Qg
KGUuZy4gdGhlIG5ldyB0eXBlcyBjYW4gb25seSBiZSB1c2VkIGluIGZldyBzZWxlY3RlZCBwbGFj
ZXMpLiBNeSAoc3ViamVjdGl2ZSkganVkZ21lbnQgaXMgdGhhdCwgaW4gdGhpcyBjYXNlIHRoZSBm
ZWF0dXJlIHlvdSBwcm9wb3NlIGlzIG5vdCB3b3J0aCBwYXlpbmcgYW55IG9mIHRoZXNlIGNvc3Rz
LCBnaXZlbiB0aGF0IHRoZXJlIGFyZSBzb21lIGFsdGVybmF0aXZlcyB0byBhY2hpZXZlIHRoZSBz
YW1lIHRoaW5nLjwvcD48cD5PbiB0aGF0IHN1YmplY3QsIG9uZSBhbHRlcm5hdGl2ZSB5b3UgaGF2
ZSBsZWZ0IG91dCBpbiB5b3VyIGRlc2NyaXB0aW9uIGlzIHRvIHVzZSB0aGUgZ2VuZXJpYyB0eXBl
IHN5c3RlbSB0byBpbXBsZW1lbnQgYSBwb29yIG1hbiAic2VsZiB0eXBlIiAtIGUuZy48L3A+PHA+
YGBgamF2YTxicj5jbGFzcyBGb28mbHQ7VCBleHRlbmRzIEZvbyZsdDtUJmd0OyZndDsgezxicj4m
bmJzcDsmbmJzcDsmbmJzcDsgVCBnZXQoKTs8YnI+fTxicj48YnI+Y2xhc3MgU3ViRm9vIGV4dGVu
ZHMgRm9vJmx0O1N1YkZvbyZndDsgeyB9PGJyPmBgYDwvcD48cD5UaGlzIGlzIG5vdCBwZXJmZWN0
IChlc3BlY2lhbGx5IHdoZW4gd29ya2luZyB3aXRoIGNvbXBsZXggY2xhc3MgaGllcmFyY2hpZXMp
IGJ1dCBJIGhhdmUgc2VlbiB0aGlzIHRlY2huaXF1ZSB1c2VkIHdpdGggc3VjY2VzcyBtYW55IHRp
bWVzIChlLmcuIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyZWFtIEFQSSBpdHNlbGYp
Ljxicj48L3A+PHA+Q2hlZXJzPGJyPk1hdXJpemlvPGJyPjwvcD48cD5bMV0gLSBodHRwczovL2xp
bmsuc3ByaW5nZXIuY29tL2NoYXB0ZXIvMTAuMTAwNy85NzgtMy01NDAtMjQ4NTEtNF8xODxicj5b
Ml0gLSBodHRwczovL3d3dy5zY2llbmNlZGlyZWN0LmNvbS9zY2llbmNlL2FydGljbGUvcGlpL1Mw
MTY3NjQyMzEzMDAwMDM4PGJyPjwvcD48cD48YnI+PC9wPjxkaXYgY2xhc3M9Im1vei1jaXRlLXBy
ZWZpeCI+T24gMDkvMDYvMjAyMyAxNzozNSwgVG9tw6HFoSBCbGXFoWEgd3JvdGU6PGJyPjwvZGl2
PjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDpGMjI5MzJFNS1BN0U0LTQ4MjUtOTlF
MS05OTVCM0ZERjBDRkRAYW5uZWNhLmN6Ij4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBl
IiBjb250ZW50PSJ0ZXh0L2h0bWw7ICI+PGRpdiBjbGFzcz0iIiBzdHlsZT0iZm9udC1mYW1pbHk6
IEhlbHZldGljYU5ldWU7Ij48Zm9udCBjbGFzcz0iIiBjb2xvcj0iIzkyOTI5MiI+PGkgY2xhc3M9
IiI+LyogSSBzZW50IHRoZSBmb2xsb3dpbmcgdG8gZGlzY3Vzc0AgbWFpbGluZyBsaXN0IHllc3Rl
cmRheS4gKHdyb25nIGxpc3QgZm9yIHRoZSB0b3BpYykgSSBob3BlIHRoaXMgd2lsbCBiZSBtb3Jl
IGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdCAqLzwvaT48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0i
IiBzdHlsZT0iZm9udC1mYW1pbHk6IEhlbHZldGljYU5ldWU7Ij48YnIgY2xhc3M9IiI+PC9kaXY+
PGRpdiBjbGFzcz0iIiBzdHlsZT0iZm9udC1mYW1pbHk6IEhlbHZldGljYU5ldWU7Ij5IaSBhbGws
PC9kaXY+PGRpdiBjbGFzcz0iIiBzdHlsZT0iZm9udC1mYW1pbHk6IEhlbHZldGljYU5ldWU7Ij48
YnIgY2xhc3M9IiI+PC9kaXY+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBIZWx2ZXRpY2FOZXVl
OyIgY2xhc3M9IiI+dGhpcyBpcyBhIHJlcXVlc3QgZm9yIGZlZWRiYWNrIG9uIGEgdG9waWMgdGhh
dCBoYXMgYmVlbiBvbiBteSBtaW5kIGZvciBhIGZldyB3ZWVrcy4gSSBoYXZlIHdyaXR0ZW4gYSBz
aG9ydCBkb2N1bWVudCBpbiBKRVAgZm9ybWF0IGFuZCB3b3VsZCBsaWtlIHRvIGFzayB5b3UgdG8g
Y29tbWVudCBpZiB5b3UgZmluZCB0aGUgZGVzY3JpYmVkIHByb3Bvc2FsIHVzZWZ1bC48L3NwYW4+
PGRpdiBjbGFzcz0iIiBzdHlsZT0iZm9udC1mYW1pbHk6IEhlbHZldGljYU5ldWU7Ij48YnIgY2xh
c3M9IiI+PC9kaXY+PGRpdiBjbGFzcz0iIiBzdHlsZT0iZm9udC1mYW1pbHk6IEhlbHZldGljYU5l
dWU7Ij5UaGFua3MsPC9kaXY+PGRpdiBjbGFzcz0iIiBzdHlsZT0iZm9udC1mYW1pbHk6IEhlbHZl
dGljYU5ldWU7Ij5Ub21hcyBCbGVzYTwvZGl2PjxkaXYgY2xhc3M9IiIgc3R5bGU9ImZvbnQtZmFt
aWx5OiBIZWx2ZXRpY2FOZXVlOyI+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzwv
ZGl2PjxkaXYgY2xhc3M9IiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBIZWx2ZXRpY2FOZXVlOyI+PGJy
IGNsYXNzPSIiPjwvZGl2PjxkaXYgY2xhc3M9IiI+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0i
IiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5TdW1tYXJ5PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+
PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+LS0tLS0tLTwvZm9udD48L2Rpdj48
ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPkVuaGFuY2Ug
dGhlIEphdmEgbGFuZ3VhZ2Ugc3ludGF4IHRvIGJldHRlciBzdXBwb3J0IHRoZSBtZXRob2QgY2hh
aW5pbmcgKG5hbWVkIHBhcmFtZXRlciBpZGlvbSkgcHJvZ3JhbW1pbmcgcGF0dGVybi48L2ZvbnQ+
PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj48
YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFj
ZT0iSGVsdmV0aWNhTmV1ZSI+R29hbHM8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBj
bGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4tLS0tLTwvZm9udD48L2Rpdj48ZGl2IGNsYXNz
PSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPlRoZSBwcmltYXJ5IGdvYWwg
aXMgdG8gcmVtb3ZlIHVubmVjZXNzYXJ5IGJvaWxlcnBsYXRlIGNvZGUgaW4gY2xhc3MgbWV0aG9k
cyBkZXNpZ25lZCBmb3IgdHlwZS1zYWZlIGNoYWluZWQgY2FsbHMsIGVzcGVjaWFsbHkgd2hlbiBj
b21iaW5lZCB3aXRoIGluaGVyaXRhbmNlLjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250
IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+
PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5Nb3RpdmF0
aW9uPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0
aWNhTmV1ZSI+LS0tLS0tLS0tLTwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNz
PSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPltNZXRob2QgY2hhaW5pbmddKDxhIGhyZWY9Imh0dHBz
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01ldGhvZF9jaGFpbmluZyIgY2xhc3M9Im1vei10eHQt
bGluay1mcmVldGV4dCIgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIj5odHRwczovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9NZXRob2RfY2hhaW5pbmc8L2E+KSBpcyBhIHdpZGVseSB1c2VkIGFuZCBwb3B1
bGFyIHByb2dyYW1taW5nIHBhdHRlcm4sIHBhcnRpY3VsYXJseSBpbiBjcmVhdGluZyBsaWJyYXJp
ZXMgKEFQSXMpIG9yIGNvbmZpZ3VyYXRpb24gb2JqZWN0cy4gUHJvZ3JhbW1lcnMgY2FuIGVhc2ls
eSBjcmVhdGUgYSBtZXRob2QgdGhhdCByZXR1cm5zIGB0aGlzYCB3aXRoIGEgbWV0aG9kIHNpZ25h
dHVyZSB0aGF0IHNwZWNpZmllcyB0aGUgcmV0dXJuaW5nIHR5cGUgb2YgdGhlIGNvbnRhaW5pbmcg
Y2xhc3MuPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVs
dmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250
IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmBgYGphdmE8L2ZvbnQ+PC9kaXY+PGRpdiBj
bGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5jbGFzcyBTaGFwZSB7
PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNh
TmV1ZSI+Jm5ic3A7ICZuYnNwOyBwdWJsaWMgU2hhcGUgc2NhbGUoZG91YmxlIHJhdGlvKSB7PC9m
b250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1
ZSI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8vIHJlY2FsY3VsYXRlIGFsbCBwb2ludHM8
L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FO
ZXVlIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmV0dXJuIHRoaXM7PC9mb250PjwvZGl2
PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7
ICZuYnNwOyB9PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0i
SGVsdmV0aWNhTmV1ZSI+fTwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIi
IGZhY2U9IkhlbHZldGljYU5ldWUiPmBgYDwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250
IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+
PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5UaGUgcHJv
YmxlbSBhcmlzZXMgd2hlbiB3ZSBjb21iaW5lIHRoaXMgcGF0dGVybiB3aXRoIGluaGVyaXRhbmNl
LiBXZSBjYW4gbG9zZSB0eXBlIGluZm9ybWF0aW9uIHdoZW4gY2FsbGluZyB0aGUgbWV0aG9kIG9u
IGEgc3ViY2xhc3MuIEZvciBleGFtcGxlLCBsZXQncyBjcmVhdGUgdHdvIHN1YmNsYXNzZXMgb2Yg
dGhlIGBTaGFwZWAgc3VwZXJjbGFzczo8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBj
bGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2Pjxk
aXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+YGBgamF2YTwv
Zm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5l
dWUiPmNsYXNzIFJlY3RhbmdsZSBleHRlbmRzIFNoYXBlIHs8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFz
cz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7IHB1
YmxpYyBSZWN0YW5nbGUgcm91bmRDb3JuZXJzKGRvdWJsZSBwaXhlbHMpIHs8L2ZvbnQ+PC9kaXY+
PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgLy8gLi4uPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZv
bnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IHJldHVybiB0aGlzOzwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIi
IGZhY2U9IkhlbHZldGljYU5ldWUiPiZuYnNwOyAmbmJzcDsgfTwvZm9udD48L2Rpdj48ZGl2IGNs
YXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPn08L2ZvbnQ+PC9kaXY+
PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj48YnIgY2xh
c3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVs
dmV0aWNhTmV1ZSI+Y2xhc3MgQ2lyY2xlIGV4dGVuZHMgU2hhcGUgezwvZm9udD48L2Rpdj48ZGl2
IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPn08L2ZvbnQ+PC9k
aXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5gYGA8
L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FO
ZXVlIj48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9
IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Tm93LCBpbWFnaW5lIHRoZSBmb2xsb3dpbmcgcGllY2Ug
b2YgY29kZSB1c2luZyB0aGUgbWluaS1saWJyYXJ5IGFib3ZlOjwvZm9udD48L2Rpdj48ZGl2IGNs
YXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0iIj48
L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FO
ZXVlIj5gYGBqYXZhPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFj
ZT0iSGVsdmV0aWNhTmV1ZSI+dmFyIG15UmVjdCA9IG5ldyBSZWN0YW5nbGUoKS5zY2FsZSgxLjIp
LnJvdW5kQ29ybmVycygxMCk7PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9
IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+YGBgPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZv
bnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwvZm9udD48L2Rp
dj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPlRoZSBj
b2RlIHdvbid0IGNvbXBpbGUgYmVjYXVzZSBgc2NhbGUoKWAgcmV0dXJucyB0aGUgdHlwZSBgU2hh
cGVgLCB3aGljaCBkb2Vzbid0IGhhdmUgdGhlIGByb3VuZENvcm5lcnNgIG1ldGhvZC4gVGhlcmUg
aXMgYWxzbyBhIHByb2JsZW0gZXZlbiB3aXRob3V0IHRoZSBmaW5hbCBgcm91bmRDb3JuZXJzKClg
IGNhbGw6PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVs
dmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250
IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmBgYGphdmE8L2ZvbnQ+PC9kaXY+PGRpdiBj
bGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj52YXIgbXlSZWN0ID0g
bmV3IFJlY3RhbmdsZSgpLnNjYWxlKDEuMik7PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZv
bnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+YGBgPC9mb250PjwvZGl2PjxkaXYgY2xh
c3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwv
Zm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5l
dWUiPlRoZSBpbmZlcnJlZCB0eXBlIG9mIGBteVJlY3RgIGlzIGBTaGFwZWAgYW5kIG5vdCBgUmVj
dGFuZ2xlYCwgc28gdGhlIGZvbGxvd2luZyBsaW5lIHdpbGwgYWxzbyBiZSBpbnZhbGlkOjwvZm9u
dD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUi
PjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBm
YWNlPSJIZWx2ZXRpY2FOZXVlIj5gYGBqYXZhPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZv
bnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+bXlSZWN0LnJvdW5kQ29ybmVycygxMCk7
PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNh
TmV1ZSI+YGBgPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0i
SGVsdmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxm
b250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPlN0cmFpZ2h0Zm9yd2FyZCBzb2x1dGlv
bnMgdG8gdGhlIHByb2JsZW0gY291bGQgYmU6PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZv
bnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwvZm9udD48L2Rp
dj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjEpIE92
ZXJyaWRlIHRoZSBgc2NhbGUoKWAgbWV0aG9kIGluIGFsbCBzdWJjbGFzc2VzIGFuZCBjaGFuZ2Ug
dGhlIHJldHVybiB0eXBlOjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIi
IGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFz
cz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5gYGBqYXZhPC9mb250Pjwv
ZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Y2xh
c3MgUmVjdGFuZ2xlIGV4dGVuZHMgU2hhcGUgezwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxm
b250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPiZuYnNwOyAmbmJzcDsgLy8gLi4uPC9m
b250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1
ZSI+Jm5ic3A7ICZuYnNwOyBAT3ZlcnJpZGU8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9u
dCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7IHB1YmxpYyBSZWN0
YW5nbGUgc2NhbGUoZG91YmxlIHJhdGlvKSB7PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZv
bnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IHN1cGVyLnNjYWxlKHJhdGlvKTs8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBj
bGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
cmV0dXJuIHRoaXM7PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFj
ZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZuYnNwOyB9ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5i
c3A7PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0
aWNhTmV1ZSI+fTwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9
IkhlbHZldGljYU5ldWUiPmBgYDwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNz
PSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+PGRpdiBj
bGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4yKSBTcGxpdCBvYmpl
Y3QgY29uc3RydWN0aW9uIGFuZCBtZXRob2QgY2FsbHM6PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9
IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwvZm9u
dD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUi
PmBgYGphdmE8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJI
ZWx2ZXRpY2FOZXVlIj52YXIgbXlSZWN0ID0gbmV3IFJlY3RhbmdsZSgpOzwvZm9udD48L2Rpdj48
ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPm15UmVjdC5z
Y2FsZSgxLjIpOzwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9
IkhlbHZldGljYU5ldWUiPm15UmVjdC5yb3VuZENvcm5lcnMoMTApOzwvZm9udD48L2Rpdj48ZGl2
IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmBgYDwvZm9udD48
L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxi
ciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNl
PSJIZWx2ZXRpY2FOZXVlIj4zKSBQYXJ0aWFsIHNvbHV0aW9uIC0gcmVvcmRlciBjaGFpbmVkIGNh
bGxzIChpZiBwb3NzaWJsZSk6PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9
IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwvZm9udD48L2Rpdj48ZGl2IGNs
YXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmBgYGphdmE8L2ZvbnQ+
PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj52
YXIgbXlSZWN0ID0gbmV3IFJlY3RhbmdsZSgpOzwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxm
b250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPm15UmVjdC5yb3VuZENvcm5lcnMoMTAp
LnNjYWxlKDEuMik7IC8vIHJvdW5kQ29ybmVycyBjYWxsZWQgZmlyc3Q8L2ZvbnQ+PC9kaXY+PGRp
diBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5gYGA8L2ZvbnQ+
PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj48
YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFj
ZT0iSGVsdmV0aWNhTmV1ZSI+QWxsIG9mIHRoZXNlIHNvbHV0aW9ucyBhZGQgdW5uZWNlc3Nhcnkg
bGluZXMgb2YgY29kZSwgYW5kIGFzIHRoZSBsaWJyYXJ5IG9mIHNoYXBlcyBncm93cywga2VlcGlu
ZyB0aGUgZGVzaXJlZCByZXR1cm4gdHlwZSB3aWxsIGludHJvZHVjZSBtb3JlIGFuZCBtb3JlIGJv
aWxlcnBsYXRlIGNvZGUuPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIg
ZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwvZm9udD48L2Rpdj48ZGl2IGNsYXNz
PSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPkRlc2NyaXB0aW9uPC9mb250
PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+
LS0tLS0tLS0tLS08L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNl
PSJIZWx2ZXRpY2FOZXVlIj5UaGUgcHJvcG9zZWQgc29sdXRpb24gdG8gdGhlIHByb2JsZW0gZGVz
Y3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uIGlzIHRvIGV4dGVuZCB0aGUgSmF2YSBzeW50
YXggZm9yIHRoZSByZXR1cm5lZCB0eXBlIGluIG1ldGhvZCBzaWduYXR1cmVzOjwvZm9udD48L2Rp
dj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBj
bGFzcz0iIj48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJI
ZWx2ZXRpY2FOZXVlIj5gYGBqYXZhPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xh
c3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Y2xhc3MgU2hhcGUgezwvZm9udD48L2Rpdj48ZGl2
IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPiZuYnNwOyAmbmJz
cDsgcHVibGljIHRoaXMgc2NhbGUoZG91YmxlIHJhdGlvKSB7IC8vICZsdDs9PT0gcmV0dXJucyB0
aGlzPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0
aWNhTmV1ZSI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8vIHJlY2FsY3VsYXRlIGFsbCBw
b2ludHM8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2
ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmV0dXJuIHRoaXM7PC9mb250
PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+
Jm5ic3A7ICZuYnNwOyB9PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIg
ZmFjZT0iSGVsdmV0aWNhTmV1ZSI+fTwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNs
YXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmBgYDwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIi
Pjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+
PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5N
ZXRob2RzIGRlY2xhcmVkIG9yIGRlZmluZWQgYXMgcmV0dXJuaW5nIGB0aGlzYCBjYW4gb25seSBy
ZXR1cm4gdGhlIGluc3RhbmNlIG9uIHdoaWNoIHRoZXkgYXJlIGNhbGxlZC4gVGhlIGZvbGxvd2lu
ZyBjb2RlIHdpbGwgYmUgdHlwZS1zYWZlIGFuZCBwZXJmZWN0bHkgdmFsaWQ6PC9mb250PjwvZGl2
PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PGJyIGNs
YXNzPSIiPjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9Ikhl
bHZldGljYU5ldWUiPmBgYGphdmE8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFz
cz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj52YXIgbXlSZWN0ID0gJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8vIGlu
ZmVycmVkIFJlY3RhbmdsZSB0eXBlPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xh
c3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZuYnNwOyBuZXcgUmVjdGFuZ2xlKCkg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Ly8gcmV0dXJu
cyBSZWN0YW5nbGUgaW5zdGFuY2U8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFz
cz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7IC5zY2FsZSgxLjIpICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
Ly8gcmV0dXJucyBSZWN0YW5nbGUgaW5zdGFuY2U8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48
Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7IC5yb3VuZENv
cm5lcnMoMTApOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8vIHJldHVybnMg
UmVjdGFuZ2xlIGluc3RhbmNlPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9
IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+YGBgPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZv
bnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwvZm9udD48L2Rp
dj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPlRoZSBj
b25zdHJ1Y3RlZCB0eXBlIGBSZWN0YW5nbGVgIGlzIHByZXNlcnZlZCB0aHJvdWdob3V0IHRoZSBl
bnRpcmUgY2FsbCBjaGFpbi48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0i
IiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xh
c3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+SXQgaXMgcG9zc2libGUg
dG8gb3ZlcnJpZGUgbWV0aG9kcyByZXR1cm5pbmcgYHRoaXNgLCBidXQgdGhlIHN1YmNsYXNzJyBp
bXBsZW1lbnRhdGlvbiBtdXN0IGFsc28gYmUgZGVjbGFyZWQgd2l0aCB0aGUgYHRoaXNgIGtleXdv
cmQgaW5zdGVhZCBvZiBhIGNvbmNyZXRlIHJldHVybmluZyB0eXBlLjwvZm9udD48L2Rpdj48ZGl2
IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0i
Ij48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRp
Y2FOZXVlIj5JdCBpcyBldmVuIHBvc3NpYmxlIHRvIHJlbW92ZSB0aGUgZXhwbGljaXQgcmV0dXJu
IHN0YXRlbWVudCBhbHRvZ2V0aGVyOjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNs
YXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+PGRp
diBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5gYGBqYXZhPC9m
b250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1
ZSI+Y2xhc3MgU2hhcGUgezwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIi
IGZhY2U9IkhlbHZldGljYU5ldWUiPiZuYnNwOyAmbmJzcDsgcHVibGljIHRoaXMgc2NhbGUoZG91
YmxlIHJhdGlvKSB7PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFj
ZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8vIHJlY2FsY3Vs
YXRlIGFsbCBwb2ludHM8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBm
YWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7IH08L2ZvbnQ+PC9kaXY+PGRpdiBjbGFz
cz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj59PC9mb250PjwvZGl2Pjxk
aXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+YGBgPC9mb250
PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+
PGJyIGNsYXNzPSIiPjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZh
Y2U9IkhlbHZldGljYU5ldWUiPk9yIHNpbXBseSByZW1vdmUgdGhlIHZhbHVlIGB0aGlzYCBmcm9t
IHRoZSByZXR1cm4gc3RhdGVtZW50OjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNs
YXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+PGRp
diBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5gYGBqYXZhPC9m
b250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1
ZSI+Y2xhc3MgU2hhcGUgezwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIi
IGZhY2U9IkhlbHZldGljYU5ldWUiPiZuYnNwOyAmbmJzcDsgcHVibGljIHRoaXMgc2NhbGUoZG91
YmxlIHJhdGlvKSB7PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFj
ZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8vIHJlY2FsY3Vs
YXRlIGFsbCBwb2ludHM8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBm
YWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgaWYgKGNvbmRp
dGlvbikgcmV0dXJuOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLy8gJmx0Oz09IGF1dG9t
YXRpY2FsbHkgcmV0dXJucyB0aGlzPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xh
c3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8v
IGRvIHNvbWV0aGluZyBlbHNlPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9
IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZuYnNwOyB9PC9mb250PjwvZGl2PjxkaXYg
Y2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+fTwvZm9udD48L2Rp
dj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmBgYDwv
Zm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5l
dWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0i
IiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5JbiBmYWN0LCBtZXRob2RzIHJldHVybmluZyBgdGhpc2Ag
Y2FuIGJlIGNvbXBpbGVkIHRvIHRoZSBzYW1lIGJ5dGVjb2RlIGFzIG1ldGhvZHMgcmV0dXJuaW5n
IGB2b2lkYC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBpbnN0YW5jZSByZWZlcmVuY2UgKGFuZCB0aGUg
cmV0dXJuZWQgdmFsdWUpIGlzIGFscmVhZHkga25vd24gdG8gdGhlIGNhbGxlciwgZWxpbWluYXRp
bmcgdGhlIG5lZWQgdG8gcGFzcyB0aGF0IHZhbHVlIGJhY2sgdGhyb3VnaCB0aGUgY2FsbCBzdGFj
ay4gQXMgYSByZXN1bHQsIGJvdGggQ1BVIGN5Y2xlcyBhbmQgbWVtb3J5IGFyZSBzYXZlZC48L2Zv
bnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVl
Ij48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIg
ZmFjZT0iSGVsdmV0aWNhTmV1ZSI+SW4gdGhlIEphdmEgd29ybGQsIGl0IGlzIGNvbW1vbiB0byBj
cmVhdGUgZ2V0dGVycyBhbmQgc2V0dGVycyBhY2NvcmRpbmcgdG8gdGhlIEphdmEgQmVhbnMgc3Bl
Y2lmaWNhdGlvbiBpbiB0aGUgZm9ybSBvZiBgZ2V0UHJvcGVydHlgL2BzZXRQcm9wZXJ0eWAgcGFp
cnMgb3IgYGlzUHJvcGVydHlgL2BzZXRQcm9wZXJ0eWAuIFNldHRlcnMgYXJlIGRlZmluZWQgYXMg
cmV0dXJuaW5nIGB2b2lkYC4gVGhlc2Ugc2V0dGVycyBjYW4gYmUgbW9yZSB1c2VmdWwgaWYgZGVm
aW5lZCBhcyByZXR1cm5pbmcgYHRoaXNgOjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250
IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+
PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5gYGBqYXZh
PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNh
TmV1ZSI+Y2xhc3MgQ3VzdG9tZXIgezwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNs
YXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPiZuYnNwOyAmbmJzcDsgcHVibGljIHRoaXMgc2V0
Rmlyc3RuYW1lKCkgeyAuLi4gfTwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNz
PSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPiZuYnNwOyAmbmJzcDsgcHVibGljIHRoaXMgc2V0U3Vy
bmFtZSgpIHsgLi4uIH08L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBm
YWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7IHB1YmxpYyB0aGlzIHNldEVtYWlsKCkg
eyAuLi4gfTwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9Ikhl
bHZldGljYU5ldWUiPn08L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBm
YWNlPSJIZWx2ZXRpY2FOZXVlIj5gYGA8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBj
bGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2Pjxk
aXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+VGhpcyBhbGxv
d3MgZm9yIG1vcmUgY29uY2lzZSB1c2FnZSB3aGVuIGNvbnN0cnVjdGluZyBhbmQgY29uZmlndXJp
bmcgYW4gaW5zdGFuY2Ugd2l0aG91dCBhZGRpbmcgbW9yZSBjb2RlOjwvZm9udD48L2Rpdj48ZGl2
IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0i
Ij48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRp
Y2FOZXVlIj5gYGBqYXZhPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIg
ZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Y3VzdG9tZXJzLmFkZCg8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFz
cz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7IG5l
dyBDdXN0b21lcigpPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFj
ZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC5zZXRGaXJzdG5h
bWUocmVzdWx0U2V0LmdldFN0cmluZygxKSk8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9u
dCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgLnNldFN1cm5hbWUocmVzdWx0U2V0LmdldFN0cmluZygyKSk8L2ZvbnQ+PC9kaXY+PGRpdiBj
bGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgLnNldEVtYWlsKHJlc3VsdFNldC5nZXRTdHJpbmcoMykpPC9mb250Pjwv
ZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+KTs8
L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FO
ZXVlIj5gYGA8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJI
ZWx2ZXRpY2FOZXVlIj48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZv
bnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+SXQgaXMgYWxzbyBwb3NzaWJsZSB0byBk
ZWNsYXJlIGFuIGludGVyZmFjZSB3aXRoIG1ldGhvZHMgcmV0dXJuaW5nIGB0aGlzYDo8L2ZvbnQ+
PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj48
YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFj
ZT0iSGVsdmV0aWNhTmV1ZSI+YGBgamF2YTwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250
IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmludGVyZmFjZSBTaGFwZSB7PC9mb250Pjwv
ZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Jm5i
c3A7ICZuYnNwOyB0aGlzIHNjYWxlKGRvdWJsZSByYXRpbyk7PC9mb250PjwvZGl2PjxkaXYgY2xh
c3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+fTwvZm9udD48L2Rpdj48
ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmBgYDwvZm9u
dD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUi
PjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBm
YWNlPSJIZWx2ZXRpY2FOZXVlIj5JbiB0aGlzIGNhc2UsIGFsbCBpbXBsZW1lbnRpbmcgY2xhc3Nl
cyBtdXN0IGRlZmluZSB0aGUgbWV0aG9kIGFzIHJldHVybmluZyBgdGhpc2AuPC9mb250PjwvZGl2
PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PGJyIGNs
YXNzPSIiPjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9Ikhl
bHZldGljYU5ldWUiPlRoZSBwcm9wb3NlZCBzeW50YXggaXMgYSBiaXQgbGVzcyB1c2VmdWwgZm9y
IGVudW1zIG9yIHJlY29yZHMsIGFzIG5laXRoZXIgb2YgdGhlbSBhbGxvd3MgZm9yIGluaGVyaXRh
bmNlLiBCdXQgZW51bXMgYW5kIHJlY29yZHMgY2FuIGFsc28gaW1wbGVtZW50IGludGVyZmFjZXMg
YW5kIGZvciB0aGlzIHJlYXNvbiBhbmQgZm9yIG92ZXJhbGwgY29uc2lzdGVuY3ksICJyZXR1cm4g
dGhpcyIgc3ludGF4IHNob3VsZCBiZSBhbGxvd2VkIGZvciBlbnVtcyBhbmQgcmVjb3Jkcy48L2Zv
bnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVl
Ij48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIg
ZmFjZT0iSGVsdmV0aWNhTmV1ZSI+VG8gYWNjb21tb2RhdGUgdGhlIHN5bnRheCB3aXRoIHRoZSBK
YXZhIFJlZmxlY3Rpb24gQVBJLCBpdCB3aWxsIHByb2JhYmx5IGJlIHJlcXVpcmVkIHRvIGNyZWF0
ZSBhIHNwZWNpYWwgZmluYWwgcGxhY2Vob2xkZXIgY2xhc3MgYFRoaXNgICh3aXRoIGFuIHVwcGVy
Y2FzZSAiVCIpLCBzaW1pbGFyIHRvIGBqYXZhLmxhbmcuVm9pZGAuPC9mb250PjwvZGl2PjxkaXYg
Y2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIi
PjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGlj
YU5ldWUiPkFsdGVybmF0aXZlczwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNz
PSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPi0tLS0tLS0tLS0tLTwvZm9udD48L2Rpdj48ZGl2IGNs
YXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPkl0IGlzIHByb2JhYmx5
IHBvc3NpYmxlIHRvIGhlbHAgYXV0by1nZW5lcmF0ZSBvdmVycmlkaW5nIG1ldGhvZHMgaW4gc3Vi
Y2xhc3NlcyB1c2luZyBhbm5vdGF0aW9uIHByb2Nlc3NpbmcsIGJ1dCB0aGlzIG9wdGlvbiB3YXNu
J3QgZnVsbHkgZXhwbG9yZWQuIEhvd2V2ZXIsIHN1Y2ggYW4gYXBwcm9hY2ggd291bGQgYWRkIGV4
dHJhIHVubmVjZXNzYXJ5IGNvZGUgdG8gY29tcGlsZWQgc3ViY2xhc3NlcyBhbmQgZ28gYWdhaW5z
dCB0aGUgcHJpbWFyeSBnb2FsIG9mIHJlZHVjaW5nIGJvaWxlcnBsYXRlLjwvZm9udD48L2Rpdj48
ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFz
cz0iIj48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2
ZXRpY2FOZXVlIj5SaXNrcyBhbmQgQXNzdW1wdGlvbnM8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0i
Ij48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4tLS0tLS0tLS0tLS0tLS0tLS0t
LS08L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRp
Y2FOZXVlIj5UaGUgcHJvcG9zZWQgc3ludGF4IGlzIGxpa2VseSB0byBicmVhayB0aGUgY29tcGF0
aWJpbGl0eSBvZiBsaWJyYXJ5LWRlcGVuZGVudCBjb2RlIHdob3NlIGF1dGhvciBkZWNpZGVzIHRv
IHN3aXRjaCB0byB0aGUgInJldHVybiB0aGlzIiBzeW50YXggYmV0d2VlbiB2ZXJzaW9ucy48L2Zv
bnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVl
Ij48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIg
ZmFjZT0iSGVsdmV0aWNhTmV1ZSI+T2xkZXIgY29kZSB0aGF0IGxvb2tzIGxpa2UgdGhpczo8L2Zv
bnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVl
Ij48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIg
ZmFjZT0iSGVsdmV0aWNhTmV1ZSI+YGBgamF2YTwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxm
b250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmNsYXNzIE15VWdseVNoYXBlIGV4dGVu
ZHMgU2hhcGUgezwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9
IkhlbHZldGljYU5ldWUiPiZuYnNwOyAmbmJzcDsgQE92ZXJyaWRlPC9mb250PjwvZGl2PjxkaXYg
Y2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZuYnNw
OyBwdWJsaWMgTXlVZ2x5U2hhcGUgc2NhbGUoZG91YmxlIHJhdGlvKSB7PC9mb250PjwvZGl2Pjxk
aXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IHJldHVybiB0aGlzOzwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIi
Pjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPiZuYnNwOyAmbmJzcDsgfTwvZm9u
dD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUi
Pn08L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRp
Y2FOZXVlIj5gYGA8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNl
PSJIZWx2ZXRpY2FOZXVlIj48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+
PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+d2lsbCBoYXZlIHRvIGJlIHJld3Jp
dHRlbiBhczo8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJI
ZWx2ZXRpY2FOZXVlIj48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZv
bnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+YGBgamF2YTwvZm9udD48L2Rpdj48ZGl2
IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmNsYXNzIE15VWds
eVNoYXBlIGV4dGVuZHMgU2hhcGUgezwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNs
YXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPiZuYnNwOyAmbmJzcDsgQE92ZXJyaWRlPC9mb250
PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+
Jm5ic3A7ICZuYnNwOyBwdWJsaWMgdGhpcyBzY2FsZShkb3VibGUgcmF0aW8pIHsgJm5ic3A7ICZu
YnNwOy8vIHNpZ25hdHVyZSBjaGFuZ2U8L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBj
bGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Ly8gb3B0aW9uYWwgcmVtb3ZhbCBvZiB0aGUgcmV0dXJuIHRoaXMgc3RhdGVtZW50PC9mb250Pjwv
ZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Jm5i
c3A7ICZuYnNwOyB9PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFj
ZT0iSGVsdmV0aWNhTmV1ZSI+fTwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNz
PSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPmBgYDwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxm
b250IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9k
aXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5vciZu
YnNwOzwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250IGNsYXNzPSIiIGZhY2U9IkhlbHZl
dGljYU5ldWUiPjxiciBjbGFzcz0iIj48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBj
bGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj5gYGBqYXZhPC9mb250PjwvZGl2PjxkaXYgY2xh
c3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+Y2xhc3MgTXlVZ2x5U2hh
cGUgZXh0ZW5kcyBTaGFwZSB7PC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9
IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIiBzdHls
ZT0id2hpdGUtc3BhY2U6cHJlIj4JPC9zcGFuPi8vIG92ZXJyaWRlIHJlbW92ZWQ8L2ZvbnQ+PC9k
aXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0iIiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj59PC9m
b250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1
ZSI+YGBgPC9mb250PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVs
dmV0aWNhTmV1ZSI+PGJyIGNsYXNzPSIiPjwvZm9udD48L2Rpdj48ZGl2IGNsYXNzPSIiPjxmb250
IGNsYXNzPSIiIGZhY2U9IkhlbHZldGljYU5ldWUiPlRoaXMgcHJvYmxlbSBjYW4gYmUgbWl0aWdh
dGVkIHdpdGggdGhlIGhlbHAgb2Ygc21hcnQgSURFcyBhdXRvbWF0aWNhbGx5IHN1Z2dlc3Rpbmcg
c3VjaCByZWZhY3RvcmluZy48L2ZvbnQ+PC9kaXY+PGRpdiBjbGFzcz0iIj48Zm9udCBjbGFzcz0i
IiBmYWNlPSJIZWx2ZXRpY2FOZXVlIj48YnIgY2xhc3M9IiI+PC9mb250PjwvZGl2PjxkaXYgY2xh
c3M9IiI+PGZvbnQgY2xhc3M9IiIgZmFjZT0iSGVsdmV0aWNhTmV1ZSI+QW5vdGhlciBwb3NzaWJs
ZSByaXNrIGlzIGJyZWFraW5nIG9sZCBjb2RlIHRoYXQgcmVsaWVzIG9uIHRoZSBSZWZsZWN0aW9u
IEFQSSBmb3Igc2Nhbm5pbmcgdGhlIHJldHVybmluZyB0eXBlcyBvZiBtZXRob2RzLjwvZm9udD48
        L2Rpdj48L2Rpdj4KPC9ibG9ja3F1b3RlPg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;" class="">​</div>
    </div>
  </div>

</div></blockquote></div><br class=""></body></html>