<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">I like the idea behind this, but I think the proposed syntax abuses <code style="font-size:1em;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">extension</code>, which applies to types not individual cases. Putting the code outside the enum also seems wrong, and it’s difficult to see how the compiler would handle it, in particular ensuring exhaustiveness. So I have come up with an alternate syntax using the example from the proposal that I think works a bit better (or at least might inspire someone else to improve it further):</p>
<pre style="font-size:1em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="hljs language-swift" style="font-size:1em;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%"><span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">enum</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">TokenState</span> </span>{
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">case</span> expired(at: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Date</span>)
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">case</span> validated(token: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">String</span>)

    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">case</span><span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">protocol</span> </span>{ <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// (1)</span>
        <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">mutating</span> <span class="hljs-func"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">react</span><span class="hljs-params">(to event: Event)</span>
        <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">var</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">description</span>: <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">String</span>
    }
    <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">caseimpl</span><span class="hljs-generics">&lt;.expired(let at)&gt;</span> </span>{ <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// (2)</span>
        <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> description: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">String</span> {
            <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-string" style="color:rgb(221,17,68)">&quot;Expired at <span class="hljs-subst" style="color:rgb(51,51,51);font-weight:bold;font-weight:normal">\(at)</span>&quot;</span>
        }
        <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">mutating</span> <span class="hljs-func"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">react</span><span class="hljs-params">(to event: Event)</span> </span>{
            <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">switch</span> event {
            <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">case</span> <span class="hljs-number" style="color:rgb(0,128,128)">_</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">as</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">TokenRefreshed</span>:
                <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span> = .validated(token: event.token)
            <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">default</span>: <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">break</span>
            }
        }
    }
    caseimpl&lt;.validated(<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> token)&gt; { <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// (3)</span>
        <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> description: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">String</span> {
            <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-string" style="color:rgb(221,17,68)">&quot;Token <span class="hljs-subst" style="color:rgb(51,51,51);font-weight:bold;font-weight:normal">\(token)</span> has been validated.&quot;</span>
        }
        <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">mutating</span> <span class="hljs-func"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">react</span><span class="hljs-params">(to event: Event)</span> </span>{
            <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">switch</span> event {
            <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">case</span> <span class="hljs-number" style="color:rgb(0,128,128)">_</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">as</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">TokenRejected</span>:
                <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span> = .expired(at: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Date</span>())
            <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">case</span> <span class="hljs-number" style="color:rgb(0,128,128)">_</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">as</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">UserLoggedOut</span>:
                <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span> = .expired(at: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Date</span>())
            <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">default</span>: <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">break</span>
            }
        }
    }
    <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// (4)</span>
}
</code></pre>
<p style="margin:0px 0px 1.2em!important">I find this easier to parse manually, and I think the compiler would too…</p>
<ul style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">At <code style="font-size:1em;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">(1)</code> it is equivalent to defining a normal protocol outside the enum. The enum itself would implicitly conform to this protocol. Calculated properties would be implicitly <code style="font-size:1em;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">get</code>-only in the protocol.</li>
<li style="margin:0.5em 0px">At <code style="font-size:1em;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">(2)</code> and <code style="font-size:1em;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">(3)</code> this would be equivalent to defining a static object that conforms to a compiler-modified version of the protocol, with static implementations of the getters/functions. Mutating functions would have an <code style="font-size:1em;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">inout</code> ref to <code style="font-size:1em;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">self</code> and they would all have any associated values sent in as per the <code style="font-size:1em;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">let</code> in the <code style="font-size:1em;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">caseimpl</code> declaration. The body would come directly from the programmer code.</li>
<li style="margin:0.5em 0px">At <code style="font-size:1em;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">(4)</code> the compiler would generate the enum’s implementation to conform to the protocol, this would <code style="font-size:1em;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">switch</code> on <code style="font-size:1em;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">self</code> and call the appropriate static functions. As per the original proposal.</li>
</ul>
<p style="margin:0px 0px 1.2em!important">It might be good if you don’t have to repeat all the func signatures in each <code style="font-size:1em;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">caseimpl</code> - I considered a different syntax where you defined a <code style="font-size:1em;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">casefunc</code> (similar to a <code style="font-size:1em;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">typealias</code>) like <code style="font-size:1em;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">casefunc ReactTo = mutating func react(to event: Event)</code> then in the <code style="font-size:1em;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">caseimpl</code> you could just do <code style="font-size:1em;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">ReactTo = { func body here }</code> but it didn’t seem to fit. Hopefully someone else will have some ideas to reduce the repetition.</p>
<div title="MDH:PGRpdj48ZGl2PkkgbGlrZSB0aGUgaWRlYSBiZWhpbmQgdGhpcywgYnV0IEkgdGhpbmsgdGhlIHBy
b3Bvc2VkIHN5bnRheCBhYnVzZXMgYGV4dGVuc2lvbmAsIHdoaWNoIGFwcGxpZXMgdG8gdHlwZXMg
bm90IGluZGl2aWR1YWwgY2FzZXMuIFB1dHRpbmcgdGhlIGNvZGUgb3V0c2lkZSB0aGUgZW51bSBh
bHNvIHNlZW1zIHdyb25nLCBhbmQgaXQncyBkaWZmaWN1bHQgdG8gc2VlIGhvdyB0aGUgY29tcGls
ZXIgd291bGQgaGFuZGxlIGl0LCBpbiBwYXJ0aWN1bGFyIGVuc3VyaW5nIGV4aGF1c3RpdmVuZXNz
LiBTbyBJIGhhdmUgY29tZSB1cCB3aXRoIGFuIGFsdGVybmF0ZSBzeW50YXggdXNpbmcgdGhlIGV4
YW1wbGUgZnJvbSB0aGUgcHJvcG9zYWwgdGhhdCBJIHRoaW5rIHdvcmtzIGEgYml0IGJldHRlciAo
b3IgYXQgbGVhc3QgbWlnaHQgaW5zcGlyZSBzb21lb25lIGVsc2UgdG8gaW1wcm92ZSBpdCBmdXJ0
aGVyKTo8YnI+PGJyPjwvZGl2PjwvZGl2PmBgYHN3aWZ0PGJyPjxkaXY+ZW51bSBUb2tlblN0YXRl
IHs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNhc2UgZXhwaXJlZChhdDogRGF0ZSk8YnI+Jm5ic3A7
Jm5ic3A7Jm5ic3A7IGNhc2UgdmFsaWRhdGVkKHRva2VuOiBTdHJpbmcpPGJyPjxicj4mbmJzcDsm
bmJzcDsmbmJzcDsgY2FzZXByb3RvY29sIHsgLy8gKDEpPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyAm
bmJzcDsmbmJzcDsmbmJzcDsgbXV0YXRpbmcgZnVuYyByZWFjdCh0byBldmVudDogRXZlbnQpPGJy
PiZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgdmFyIGRlc2NyaXB0aW9uOiBT
dHJpbmc8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNhc2Vp
bXBsJmx0Oy5leHBpcmVkKGxldCBhdCkmZ3Q7IHsgLy8gKDIpPGJyPiZuYnNwOyZuYnNwOyZuYnNw
OyAmbmJzcDsmbmJzcDsmbmJzcDsgdmFyIGRlc2NyaXB0aW9uOiBTdHJpbmcgezxicj4mbmJzcDsm
bmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4g
IkV4cGlyZWQgYXQgXChhdCkiPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJz
cDsgfTxicj4mbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IG11dGF0aW5nIGZ1
bmMgcmVhY3QodG8gZXZlbnQ6IEV2ZW50KSB7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsm
bmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IHN3aXRjaCBldmVudCB7PGJyPiZuYnNwOyZu
YnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IGNhc2UgXyBh
cyBUb2tlblJlZnJlc2hlZDo8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOyZuYnNw
OyAmbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IHNlbGYgPSAudmFsaWRhdGVk
KHRva2VuOiBldmVudC50b2tlbik8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOyZu
YnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgZGVmYXVsdDogYnJlYWs8YnI+Jm5ic3A7Jm5ic3A7Jm5i
c3A7ICZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4mbmJzcDsmbmJz
cDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+
Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNhc2VpbXBsJmx0Oy52YWxpZGF0ZWQobGV0IHRva2VuKSZndDsg
eyAvLyAoMyk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOyZuYnNwOyB2YXIgZGVz
Y3JpcHRpb246IFN0cmluZyB7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJz
cDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybiAiVG9rZW4gXCh0b2tlbikgaGFzIGJlZW4gdmFs
aWRhdGVkLiI8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPiZu
YnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgbXV0YXRpbmcgZnVuYyByZWFjdCh0
byBldmVudDogRXZlbnQpIHs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOyZuYnNw
OyAmbmJzcDsmbmJzcDsmbmJzcDsgc3dpdGNoIGV2ZW50IHs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7
ICZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgY2FzZSBfIGFzIFRva2VuUmVq
ZWN0ZWQ6PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7Jm5i
c3A7Jm5ic3A7ICZuYnNwOyZuYnNwOyZuYnNwOyBzZWxmID0gLmV4cGlyZWQoYXQ6IERhdGUoKSk8
YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJz
cDsgY2FzZSBfIGFzIFVzZXJMb2dnZWRPdXQ6PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsm
bmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOyZuYnNwOyBzZWxmID0g
LmV4cGlyZWQoYXQ6IERhdGUoKSk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOyZu
YnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgZGVmYXVsdDogYnJlYWs8YnI+Jm5ic3A7Jm5ic3A7Jm5i
c3A7ICZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4mbmJzcDsmbmJz
cDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+
Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vICg0KTxicj59PGJyPmBgYDxicj48L2Rpdj48ZGl2PkkgZmlu
ZCB0aGlzIGVhc2llciB0byBwYXJzZSBtYW51YWxseSwgYW5kIEkgdGhpbmsgdGhlIGNvbXBpbGVy
IHdvdWxkIHRvby4uLjxicj48L2Rpdj48ZGl2PiogQXQgYCgxKWAgaXQgaXMgZXF1aXZhbGVudCB0
byBkZWZpbmluZyBhIG5vcm1hbCBwcm90b2NvbCBvdXRzaWRlIHRoZSBlbnVtLiBUaGUgZW51bSBp
dHNlbGYgd291bGQgaW1wbGljaXRseSBjb25mb3JtIHRvIHRoaXMgcHJvdG9jb2wuIENhbGN1bGF0
ZWQgcHJvcGVydGllcyB3b3VsZCBiZSBpbXBsaWNpdGx5IGBnZXRgLW9ubHkgaW4gdGhlIHByb3Rv
Y29sLjxicj48L2Rpdj48ZGl2PiogQXQgYCgyKWAgYW5kIGAoMylgIHRoaXMgd291bGQgYmUgZXF1
aXZhbGVudCB0byBkZWZpbmluZyBhIHN0YXRpYyBvYmplY3QgdGhhdCBjb25mb3JtcyB0byBhIGNv
bXBpbGVyLW1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sLCB3aXRoIHN0YXRpYyBpbXBs
ZW1lbnRhdGlvbnMgb2YgdGhlIGdldHRlcnMvZnVuY3Rpb25zLiBNdXRhdGluZyBmdW5jdGlvbnMg
d291bGQgaGF2ZSBhbiBgaW5vdXRgIHJlZiB0byBgc2VsZmAgYW5kIHRoZXkgd291bGQgYWxsIGhh
dmUgYW55IGFzc29jaWF0ZWQgdmFsdWVzIHNlbnQgaW4gYXMgcGVyIHRoZSBgbGV0YCBpbiB0aGUg
YGNhc2VpbXBsYCBkZWNsYXJhdGlvbi4gVGhlIGJvZHkgd291bGQgY29tZSBkaXJlY3RseSBmcm9t
IHRoZSBwcm9ncmFtbWVyIGNvZGUuPGJyPjwvZGl2PjxkaXY+KiBBdCBgKDQpYCB0aGUgY29tcGls
ZXIgd291bGQgZ2VuZXJhdGUgdGhlIGVudW0ncyBpbXBsZW1lbnRhdGlvbiB0byBjb25mb3JtIHRv
IHRoZSBwcm90b2NvbCwgdGhpcyB3b3VsZCBgc3dpdGNoYCBvbiBgc2VsZmAgYW5kIGNhbGwgdGhl
IGFwcHJvcHJpYXRlIHN0YXRpYyBmdW5jdGlvbnMuIEFzIHBlciB0aGUgb3JpZ2luYWwgcHJvcG9z
YWwuPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SXQgbWlnaHQgYmUgZ29vZCBpZiB5b3Ug
ZG9uJ3QgaGF2ZSB0byByZXBlYXQgYWxsIHRoZSBmdW5jIHNpZ25hdHVyZXMgaW4gZWFjaCBgY2Fz
ZWltcGxgIC0gSSBjb25zaWRlcmVkIGEgZGlmZmVyZW50IHN5bnRheCB3aGVyZSB5b3UgZGVmaW5l
ZCBhIGBjYXNlZnVuY2AgKHNpbWlsYXIgdG8gYSBgdHlwZWFsaWFzYCkgbGlrZSBgY2FzZWZ1bmMg
UmVhY3RUbyA9IG11dGF0aW5nIGZ1bmMgcmVhY3QodG8gZXZlbnQ6IEV2ZW50KWAgdGhlbiBpbiB0
aGUgYGNhc2VpbXBsYCB5b3UgY291bGQganVzdCBkbyBgUmVhY3RUbyA9IHsgZnVuYyBib2R5IGhl
cmUgfWAgYnV0IGl0IGRpZG4ndCBzZWVtIHRvIGZpdC4gSG9wZWZ1bGx5IHNvbWVvbmUgZWxzZSB3
aWxsIGhhdmUgc29tZSBpZGVhcyB0byByZWR1Y2UgdGhlIHJlcGV0aXRpb24uPGJyPjwvZGl2Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>