<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">A fundamental problem is, how do we get rid 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">associatedtype</code> duplicates?</p>
<p style="margin:0px 0px 1.2em!important">A pedantic approach is to add trait operations for conformances:</p>
<pre style="font-size:0.85em;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: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)"><span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">protocol</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Constructible</span> </span>{
    associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span>
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(<span class="hljs-number" style="color:rgb(0,128,128)">_</span> value: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span>)
}

<span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">struct</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyStruct</span> </span>{
    conformance <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Constructible</span> {
        rename associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">ValueInt</span> = <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span>
    }
    conformance <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Constructible</span> {
        rename associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">ValueString</span> = <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span>
    }

    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">typealias</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">ValueInt</span> = <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>  <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// or can be inferred</span>
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(<span class="hljs-number" style="color:rgb(0,128,128)">_</span> value: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>)

    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">typealias</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">ValueString</span> = <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">String</span>  <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// or can be inferred</span>
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(<span class="hljs-number" style="color:rgb(0,128,128)">_</span> value: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">String</span>)
}
</code></pre>
<p style="margin:0px 0px 1.2em!important">This way, if there is a if there is a conflicting member, which does not use any of the associated types, like <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">func foo()</code>, then we can give it different meanings in different conformances.<br>Although this approach is the most clean one from theoreticall point of view, choosing different names for associated types would not look very good in practise.</p>
<p style="margin:0px 0px 1.2em!important">One possible solution is to <em>always</em> automatically match <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">associatedtype</code>s, without using <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">typealias</code>es.</p>
<pre style="font-size:0.85em;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: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)"><span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">protocol</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ConstructibleFromBoth</span> </span>{
    associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">First</span>
    associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Second</span>
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(first: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">First</span>)
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(second: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Second</span>)
}

<span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">struct</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyStruct</span> : <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ConstructibleFromBoth</span> </span>{
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(first: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>)
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(second: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Double</span>)
}

<span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">extension</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyStruct</span> </span>{
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(first: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">String</span>)   <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// now there are 2 distinct conformances</span>
}

<span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">extension</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyStruct</span> </span>{
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(second: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Float</span>)   <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// now there are 4 distinct conformances</span>
}
</code></pre>
<p style="margin:0px 0px 1.2em!important">It introduces another potentially exponential algorithm for compiler. Although, does it? During a conformance test in some generic function, compiler will need to only find the first match or two.<br>Anyway, I guess, people would prefer to state explicitly that a type conforms to multiple versions of a protocol.</p>
<p style="margin:0px 0px 1.2em!important">Attempt #3. We can resolve the conflict between associated types, if we delete (if trait sense) confliting associated types from the type. But with extensions, all associated types can be made conflicting. So there needs to be some attribute, marking, which of the associated types we don’t want. It can lie at the place of conformance:</p>
<pre style="font-size:0.85em;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: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)"><span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">struct</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyStruct</span> </span>{ }
<span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">extension</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyStruct</span> : @<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">dontCreateTypealiases</span> (<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Constructible</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">where</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Value</span> == <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Int</span>) </span>{ ... }
<span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">extension</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyStruct</span> : @<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">dontCreateTypealiases</span> (<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Constructible</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">where</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Value</span> == <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">String</span>) </span>{ ... }
<span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// MyStruct.Value.self  // error, no such type</span>

<span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">struct</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">NormalConformanceTest</span> : <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Constructible</span> </span>{ <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(<span class="hljs-number" style="color:rgb(0,128,128)">_</span> value: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Float</span>) }
<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">NormalConformanceTest</span>.<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span>.<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span>  <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">//=&gt; Float</span>
</code></pre>
<p style="margin:0px 0px 1.2em!important">Or we can let constrained protocols syntax carry this attribute by default:</p>
<pre style="font-size:0.85em;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: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)"><span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">extension</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">MyStruct</span> : (<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Constructible</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">where</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Value</span> == <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Int</span>) </span>{ ... }
<span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">// MyStruct.Value.self  // error, no such type</span>

<span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">struct</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">NormalConformanceTest</span>: <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Constructible</span> </span>{ <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(<span class="hljs-number" style="color:rgb(0,128,128)">_</span> value: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Float</span>) }
<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">NormalConformanceTest</span>.<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Value</span>.<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span>  <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">//=&gt; Float</span>
</code></pre>
<p style="margin:0px 0px 1.2em!important">The only thing left to solve is generic protocol declaration syntax and protocol specialization syntax. I’d like to present two ways to do this. First, taking ideas from Rust:</p>
<pre style="font-size:0.85em;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: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)"><span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">protocol</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ContainsCollection</span>&lt;<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Element</span>&gt; </span>{
    associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">CollectionType</span> : <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Collection</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">where</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">CollectionType</span>.<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Element</span> == <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Element</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">collection</span><span class="hljs-params">()</span> -&gt; <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">CollectionType</span>
}

<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">extension</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">ContainsCollection</span><span class="hljs-generics">&lt;Character&gt;</span>, <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">ContainsCollection</span><span class="hljs-generics">&lt;UnicodeScalar&gt;</span>, <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">ContainsCollection</span><span class="hljs-generics">&lt;CChar&gt;</span> </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">collection</span><span class="hljs-params">()</span> -&gt; <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">CharacterView</span>
    <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">collection</span><span class="hljs-params">()</span> -&gt; <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">UnicodeScalarView</span>
    <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">collection</span><span class="hljs-params">()</span> -&gt; <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">ContiguousArray</span><span class="hljs-generics">&lt;CChar&gt;</span>
}</span>
</code></pre>
<p style="margin:0px 0px 1.2em!important">Generic parameters are used to disambiguate between different conformances, and associated types are just matched. Explicit <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">typealias</code> specifiction is prohibited, because conflicts.</p>
<p style="margin:0px 0px 1.2em!important">Second, without modifying current protocol declaration syntax:</p>
<pre style="font-size:0.85em;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: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)"><span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">protocol</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ContainsCollection</span> </span>{
    associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Element</span>
    associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">CollectionType</span> : <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Collection</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">where</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">CollectionType</span>.<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Element</span> == <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Element</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">collection</span><span class="hljs-params">()</span> -&gt; <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">CollectionType</span>
}

<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">extension</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">ContainsCollection</span><span class="hljs-generics">&lt;Element: Character&gt;</span>, <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">ContainsCollection</span><span class="hljs-generics">&lt;Element: UnicodeScalar&gt;</span>, <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">ContainsCollection</span><span class="hljs-generics">&lt;Element: CChar&gt;</span> </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">collection</span><span class="hljs-params">()</span> -&gt; <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">CharacterView</span>
    <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">collection</span><span class="hljs-params">()</span> -&gt; <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">UnicodeScalarView</span>
    <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">collection</span><span class="hljs-params">()</span> -&gt; <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">ContiguousArray</span><span class="hljs-generics">&lt;CChar&gt;</span>
}</span>
</code></pre>
<div title="MDH:PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj5BIGZ1bmRh
bWVudGFsIHByb2JsZW0gaXMsIGhvdyBkbyB3ZSBnZXQgcmlkIG9mIGBhc3NvY2lhdGVkdHlwZWAg
ZHVwbGljYXRlcz88L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiPkEgcGVkYW50aWMgYXBwcm9hY2ggaXMgdG8gYWRkIHRyYWl0IG9wZXJhdGlv
bnMgZm9yIGNvbmZvcm1hbmNlczo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj5gYGBzd2lmdDwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIj5wcm90b2NvbCBDb25zdHJ1Y3RpYmxlIHs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSI+Jm5ic3A7ICZuYnNwOyBhc3NvY2lhdGVkdHlwZSBWYWx1ZTwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgJm5ic3A7IGluaXQoXyB2YWx1ZTogVmFsdWUpPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPn08L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSI+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSI+c3RydWN0IE15U3RydWN0IHs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+
Jm5ic3A7ICZuYnNwOyBjb25mb3JtYW5jZSBDb25zdHJ1Y3RpYmxlIHs8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHJlbmFtZSBhc3NvY2lh
dGVkdHlwZSBWYWx1ZUludCA9IFZhbHVlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZu
YnNwOyAmbmJzcDsgfTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgJm5ic3A7
IGNvbmZvcm1hbmNlIENvbnN0cnVjdGlibGUgezwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmVuYW1lIGFzc29jaWF0ZWR0eXBlJm5ic3A7
VmFsdWVTdHJpbmcgPSBWYWx1ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsg
Jm5ic3A7IH08L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgJm5ic3A7IHR5cGVhbGlhcyBWYWx1ZUludCZu
YnNwOz0gSW50ICZuYnNwOy8vIG9yIGNhbiBiZSBpbmZlcnJlZDxicj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSI+Jm5ic3A7ICZuYnNwOyBpbml0KF8gdmFsdWU6IEludCk8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2PiZuYnNwOyAmbmJzcDsgdHlwZWFsaWFzIFZhbHVlU3Ry
aW5nJm5ic3A7PSBTdHJpbmcgJm5ic3A7Ly8gb3IgY2FuIGJlIGluZmVycmVkPGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsgaW5pdChfIHZhbHVlOiBTdHJpbmcpPC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiPn08L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+YGBg
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSI+VGhpcyB3YXksIGlmIHRoZXJlIGlzIGEgaWYgdGhlcmUgaXMgYSBjb25mbGljdGlu
ZyBtZW1iZXIsIHdoaWNoIGRvZXMgbm90IHVzZSBhbnkgb2YgdGhlIGFzc29jaWF0ZWQgdHlwZXMs
IGxpa2UgYGZ1bmMgZm9vKClgLCB0aGVuIHdlIGNhbiBnaXZlIGl0IGRpZmZlcmVudCBtZWFuaW5n
cyBpbiBkaWZmZXJlbnQgY29uZm9ybWFuY2VzLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
Ij5BbHRob3VnaCB0aGlzIGFwcHJvYWNoIGlzIHRoZSBtb3N0IGNsZWFuIG9uZSBmcm9tIHRoZW9y
ZXRpY2FsbCBwb2ludCBvZiB2aWV3LCBjaG9vc2luZyBkaWZmZXJlbnQgbmFtZXMgZm9yIGFzc29j
aWF0ZWQgdHlwZXMgd291bGQgbm90IGxvb2sgdmVyeSBnb29kIGluIHByYWN0aXNlLjwvZGl2Pjwv
ZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiPk9uZSBwb3NzaWJsZSBzb2x1dGlvbiBpcyB0byAqYWx3YXlzKiBhdXRvbWF0
aWNhbGx5IG1hdGNoIGBhc3NvY2lhdGVkdHlwZWBzLCB3aXRob3V0IHVzaW5nIGB0eXBlYWxpYXNg
ZXMuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
Ij48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPmBgYHN3aWZ0PC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiPnByb3RvY29sIENvbnN0cnVjdGlibGVGcm9tQm90aCB7PC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsgYXNzb2NpYXRlZHR5cGUgRmly
c3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICZuYnNwOyBhc3NvY2lhdGVk
dHlwZSBTZWNvbmQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICZuYnNwOyBp
bml0KGZpcnN0OiBGaXJzdCk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICZu
YnNwOyBpbml0KHNlY29uZDogU2Vjb25kKTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj59
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSI+c3RydWN0IE15U3RydWN0IDogQ29uc3RydWN0aWJsZUZyb21Cb3RoIHs8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICZuYnNwOyBpbml0KGZpcnN0OiBJbnQpPC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsgaW5pdChzZWNvbmQ6IERv
dWJsZSk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+fTwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPmV4dGVuc2lvbiBN
eVN0cnVjdCB7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsgaW5p
dChmaXJzdDogU3RyaW5nKSAmbmJzcDsgLy8gbm93IHRoZXJlIGFyZSAyIGRpc3RpbmN0IGNvbmZv
cm1hbmNlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj59PC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+ZXh0ZW5zaW9u
IE15U3RydWN0IHs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICZuYnNwOyBp
bml0KHNlY29uZDogRmxvYXQpICZuYnNwOyAvLyBub3cgdGhlcmUgYXJlIDQgZGlzdGluY3QgY29u
Zm9ybWFuY2VzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPn08L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSI+YGBgPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+SXQgaW50cm9kdWNlcyBhbm90aGVyIHBvdGVudGlh
bGx5IGV4cG9uZW50aWFsIGFsZ29yaXRobSBmb3IgY29tcGlsZXIuIEFsdGhvdWdoLCBkb2VzIGl0
PyBEdXJpbmcgYSBjb25mb3JtYW5jZSB0ZXN0IGluIHNvbWUgZ2VuZXJpYyBmdW5jdGlvbiwgY29t
cGlsZXIgd2lsbCBuZWVkIHRvIG9ubHkgZmluZCB0aGUgZmlyc3QgbWF0Y2ggb3IgdHdvLjwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj5Bbnl3YXksIEkgZ3Vlc3MsIHBlb3BsZSB3b3VsZCBw
cmVmZXIgdG8gc3RhdGUgZXhwbGljaXRseSB0aGF0IGEgdHlwZSBjb25mb3JtcyB0byBtdWx0aXBs
ZSB2ZXJzaW9ucyBvZiBhIHByb3RvY29sLjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIj5BdHRlbXB0ICMzLiBXZSBjYW4gcmVzb2x2ZSB0aGUgY29uZmxpY3QgYmV0
d2VlbiBhc3NvY2lhdGVkIHR5cGVzLCBpZiB3ZSBkZWxldGUgKGlmIHRyYWl0IHNlbnNlKSBjb25m
bGl0aW5nIGFzc29jaWF0ZWQgdHlwZXMgZnJvbSB0aGUgdHlwZS4gQnV0IHdpdGggZXh0ZW5zaW9u
cywgYWxsIGFzc29jaWF0ZWQgdHlwZXMgY2FuIGJlIG1hZGUgY29uZmxpY3RpbmcuIFNvIHRoZXJl
IG5lZWRzIHRvIGJlIHNvbWUgYXR0cmlidXRlLCBtYXJraW5nLCB3aGljaCBvZiB0aGUgYXNzb2Np
YXRlZCB0eXBlcyB3ZSBkb24ndCB3YW50LiBJdCBjYW4gbGllIGF0IHRoZSBwbGFjZSBvZiBjb25m
b3JtYW5jZTo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIj5gYGBzd2lmdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj5z
dHJ1Y3QgTXlTdHJ1Y3QgeyB9PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPmV4dGVuc2lv
biBNeVN0cnVjdCA6IEBkb250Q3JlYXRlVHlwZWFsaWFzZXMmbmJzcDsoQ29uc3RydWN0aWJsZSB3
aGVyZSBWYWx1ZSA9PSBJbnQpIHsgLi4uIH08L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+
ZXh0ZW5zaW9uIE15U3RydWN0IDogQGRvbnRDcmVhdGVUeXBlYWxpYXNlcyAoQ29uc3RydWN0aWJs
ZSB3aGVyZSBWYWx1ZSA9PSBTdHJpbmcpIHsgLi4uIH08L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSI+Ly8gTXlTdHJ1Y3QuVmFsdWUuc2VsZiAmbmJzcDsvLyBlcnJvciwgbm8gc3VjaCB0eXBl
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSI+c3RydWN0IE5vcm1hbENvbmZvcm1hbmNlVGVzdCA6IENvbnN0cnVjdGlibGUgeyBp
bml0KF8gdmFsdWU6IEZsb2F0KSB9PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPk5vcm1h
bENvbmZvcm1hbmNlVGVzdC5WYWx1ZS5zZWxmICZuYnNwOy8vPSZndDsgRmxvYXQ8YnI+PC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPmBgYDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
Ij48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPk9yIHdlIGNhbiBsZXQgY29uc3Ry
YWluZWQgcHJvdG9jb2xzIHN5bnRheCBjYXJyeSB0aGlzIGF0dHJpYnV0ZSBieSBkZWZhdWx0Ojwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiPmBgYHN3aWZ0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPmV4dGVuc2lvbiBN
eVN0cnVjdCA6IChDb25zdHJ1Y3RpYmxlIHdoZXJlIFZhbHVlID09IEludCkgeyAuLi4gfTwvZGl2
Pi8vIE15U3RydWN0LlZhbHVlLnNlbGYgJm5ic3A7Ly8gZXJyb3IsIG5vIHN1Y2ggdHlwZTwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPnN0
cnVjdCBOb3JtYWxDb25mb3JtYW5jZVRlc3Q6IENvbnN0cnVjdGlibGUgeyBpbml0KF8gdmFsdWU6
IEZsb2F0KSB9PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPk5vcm1hbENvbmZvcm1hbmNl
VGVzdC5WYWx1ZS5zZWxmICZuYnNwOy8vPSZndDsgRmxvYXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSI+YGBgPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9leHRyYSI+VGhlIG9ubHkgdGhpbmcgbGVmdCB0byBzb2x2ZSBpcyBnZW5l
cmljIHByb3RvY29sIGRlY2xhcmF0aW9uIHN5bnRheCBhbmQgcHJvdG9jb2wgc3BlY2lhbGl6YXRp
b24gc3ludGF4LiBJJ2QgbGlrZSB0byBwcmVzZW50IHR3byB3YXlzIHRvIGRvIHRoaXMuIEZpcnN0
LCB0YWtpbmcgaWRlYXMgZnJvbSBSdXN0OjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48
YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPmBgYHN3aWZ0PC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiPnByb3RvY29sIENvbnRhaW5zQ29sbGVjdGlvbiZsdDtFbGVtZW50Jmd0
OyB7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsgYXNzb2NpYXRl
ZHR5cGUgQ29sbGVjdGlvblR5cGUgOiBDb2xsZWN0aW9uIHdoZXJlIENvbGxlY3Rpb25UeXBlLkVs
ZW1lbnQgPT0gRWxlbWVudDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgJm5i
c3A7IGZ1bmMgY29sbGVjdGlvbigpIC0mZ3Q7IENvbGxlY3Rpb25UeXBlPC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiPn08L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj5leHRlbnNpb24gU3RyaW5nIDogQ29udGFpbnNDb2xs
ZWN0aW9uJmx0O0NoYXJhY3RlciZndDssIENvbnRhaW5zQ29sbGVjdGlvbiZsdDtVbmljb2RlU2Nh
bGFyJmd0OywgQ29udGFpbnNDb2xsZWN0aW9uJmx0O0NDaGFyJmd0OyB7PC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsgZnVuYyBjb2xsZWN0aW9uKCkgLSZndDsgQ2hh
cmFjdGVyVmlldzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsgJm5ic3A7IGZ1
bmMgY29sbGVjdGlvbigpIC0mZ3Q7IFVuaWNvZGVTY2FsYXJWaWV3PC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsgZnVuYyBjb2xsZWN0aW9uKCkgLSZndDsgQ29udGln
dW91c0FycmF5Jmx0O0NDaGFyJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj59PC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPmBgYDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPkdlbmVyaWMgcGFyYW1ldGVy
cyBhcmUgdXNlZCB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiBkaWZmZXJlbnQgY29uZm9ybWFuY2Vz
LCBhbmQgYXNzb2NpYXRlZCB0eXBlcyBhcmUganVzdCBtYXRjaGVkLiBFeHBsaWNpdCBgdHlwZWFs
aWFzYCBzcGVjaWZpY3Rpb24gaXMgcHJvaGliaXRlZCwgYmVjYXVzZSBjb25mbGljdHMuPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSI+U2Vjb25kLCB3aXRob3V0IG1vZGlmeWluZyBjdXJyZW50IHByb3RvY29sIGRlY2xhcmF0aW9u
IHN5bnRheDo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+YGBgc3dpZnQ8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+cHJvdG9jb2wgQ29udGFpbnNDb2xsZWN0aW9uIHs8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+Jm5ic3A7ICZuYnNwOyBhc3NvY2lhdGVkdHlwZSBF
bGVtZW50PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsgYXNzb2Np
YXRlZHR5cGUgQ29sbGVjdGlvblR5cGUgOiBDb2xsZWN0aW9uIHdoZXJlIENvbGxlY3Rpb25UeXBl
LkVsZW1lbnQgPT0gRWxlbWVudDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj4mbmJzcDsg
Jm5ic3A7IGZ1bmMgY29sbGVjdGlvbigpIC0mZ3Q7IENvbGxlY3Rpb25UeXBlPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiPn08L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj5leHRlbnNpb24gU3RyaW5nIDogQ29udGFpbnND
b2xsZWN0aW9uJmx0O0VsZW1lbnQ6IENoYXJhY3RlciZndDssIENvbnRhaW5zQ29sbGVjdGlvbiZs
dDtFbGVtZW50OiBVbmljb2RlU2NhbGFyJmd0OywgQ29udGFpbnNDb2xsZWN0aW9uJmx0O0VsZW1l
bnQ6IENDaGFyJmd0OyB7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAmbmJz
cDsgZnVuYyBjb2xsZWN0aW9uKCkgLSZndDsgQ2hhcmFjdGVyVmlldzwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIj4mbmJzcDsgJm5ic3A7IGZ1bmMgY29sbGVjdGlvbigpIC0mZ3Q7IFVuaWNv
ZGVTY2FsYXJWaWV3PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPiZuYnNwOyAmbmJzcDsg
ZnVuYyBjb2xsZWN0aW9uKCkgLSZndDsgQ29udGlndW91c0FycmF5Jmx0O0NDaGFyJmd0OzwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj59PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
PmBgYDwvZGl2PjwvZGl2PjwvZGl2Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>