Topic: C++ Syntax Possibilities
Author: billclare3@gmail.com
Date: Wed, 30 Nov 2016 15:51:36 -0800 (PST)
Raw View
------=_Part_118_538700335.1480549896005
Content-Type: multipart/alternative;
boundary="----=_Part_119_2129148651.1480549896006"
------=_Part_119_2129148651.1480549896006
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Introduction
This somewhat provocative note was posted earlier on the S8 Concepts forum,=
=20
since it is largely related to templates and Concepts. As it did not=20
provoke a response there, I thought it might be of some interest here. =20
This note suggests some generalization and simplification of C++ language=
=20
syntax, largely based on extensions of what is currently in =E2=80=9CConcep=
ts=20
Lite=E2=80=9D. There is some general discussion of reasons for what exist=
s, and=20
of future evolution. Since it is a rather long note for a forum entry,=20
skipping to the Examples section might provide a quick overview of some of=
=20
the resulting possibilities.
A Word file with the same contents is also attached.
Objectives
Previous notes posted here have made suggestions for simplifying and=20
expanding approaches to C++ templates and Concepts. This note is designed=
=20
to expand on that and to suggest a start at a significant simplification of=
=20
code constructs and syntax. =20
As additional capabilities, have been added to the language, C++ syntax=20
constructs have become increasingly distracting relative to basic code=20
functionality. Some emphasis on simplification is already happening, such=
=20
as not having to specify the same type repeatedly in template parameters,=
=20
in requirements clauses, and in function parameters. However, the=20
complexities seem to be growing at a greater rate. =20
The attempt here is to define syntax that reads naturally in expressing the=
=20
programmer=E2=80=99s abstractions and intent, rather than its implementatio=
n=20
characteristics. A measure of this is code that =E2=80=9Cdoes what it says=
=E2=80=9D and=20
=E2=80=9Csays what it does=E2=80=9D, which is hard enough to do anyway, wit=
hout having to=20
be incorporated in syntax to tell the compiler what it is trying to do. =20
The code does need to speak to the compiler as well as the human reader,=20
but, if well crafted, doing the latter should suffice for the former. =20
Ultimately, the focus needs to be on the abstractions needed by the=20
programmer to convey the essence of a computation or of a data type. =20
Often, this abstraction can also lead to increased generality. =20
This note discusses an incomplete series of topics, and there are at best=
=20
incomplete arguments for any particular topic. The hope, however, is that=
=20
taken together, this might suggest fundamental approaches that=20
significantly increase the abstraction level of the language.=20
Precision and Lack of Clarity
A Latin teacher once described a good translation as being both accurate=20
and idiomatic. The analogy to programming languages is a need for both=20
precision and clarity. Ultimately syntax needs to be precise, both for the=
=20
compiler and the language expert. Equally important though, it requires=20
clarity to convey the intent of the programmer, as well as the demands of=
=20
syntax.=20
Consider const, volatile, reference and reference reference. It is easy to=
=20
add qualifiers such as const and reference to a type specification. For=20
removing these qualifiers, a variety of syntax circumlocutions are=20
invented, some of which remove the qualification, others of which do not. =
=20
While there is value in supporting capabilities through library facilities=
=20
rather than language change, simple use of a negative symbol could lead to=
=20
code that is simper and intuitively expressive; for instance: (type ~const=
=20
~&).=20
Often focus on language processing precision leads to confusing and arcane=
=20
constructs that suffer in programmer clarity such as:
requires requires {typename =E2=80=A6type }; . . .
concept bool {return requires . . . };
Here the ellipses indicate areas of code where the programmer=E2=80=99s con=
struct=20
is buried in a cascade of syntax constructs. This lack of simplicity and=
=20
clarity in syntax has undoubtedly raised some suspicions about the=20
underlying consistency for Concepts, and this hesitancy may account for=20
much of the reluctance to approve Concepts for C++.
More difficult are library facilities for interacting with compiler=20
constructs for multiple types of references (rvalue, glvalue, prvalue, . .=
=20
..) and =E2=80=9Creference collapsing=E2=80=9D rules through an amazing set =
of =E2=80=9Cstd::xxx=E2=80=9D =20
constructs. It is an interesting question, if there are many experts who=
=20
could look at a set of =E2=80=9Cdecltype=E2=80=9D declarations and correctl=
y parse their=20
meaning. More direct approaches to capturing programmer intent here is=20
discussed under the topic of function parameters.
Compatibility
Of course, compatibility is a dominant issue. Other approaches, such as=20
Java, D and C#, are spin offs that have sought simplification in critical=
=20
areas, but have lost much of the basic underlying power of C++. An=20
alternative is new syntax, that leaves the base capabilities in place, and=
=20
even suggests enhancements. =20
However, forcing new features into old syntax can lead to awkward=20
constructs that often disguise the programmer=E2=80=99s intent. Constructs=
for=20
references to references with internal collapsing rules, to permit move=20
semantics is an example of such obfuscation. =20
It is useful to consider compatibility of language elements, constructs,=20
abstractions and performance separately from compatibility of concrete=20
syntax. New syntax can often be achieved solely with extensions and=20
additions. However, revisions at the level of syntax parsing need not=20
necessarily exclude the possibility for alternative compiler syntax=20
processing signaled by pragmas. Such pragmas are already used by tools,=20
for such purposes as debugging assertions and enforcing local consistency=
=20
for coding styles and standards. Not systematizing these with language=20
facilities adds considerable code complexity along with non-standard=20
compiler options and directives, and often encourages preprocessing macros.
As a fairly simple example of syntax extension, the compiler could be made=
=20
aware of new line indications and indentation to simplify punctuation and=
=20
emphasis clarity. =E2=80=9CModernization=E2=80=9D of C++ syntax could star=
t with removal=20
of tri-graph support.=20
Such considerations are at the boundaries of compiler, preprocessor and=20
tool support. Standardization of a minimal canonical set of controls can=
=20
increase current portability, consistency and clarity.
The stability issue then is compatibility for interoperability of new and=
=20
existing code, that may be expressed with somewhat different syntax. That=
=20
is, compatibility based on what the language says, rather than necessarily=
=20
on how it says it.
Terminology
Terminology used for syntax can be obtuse and even misleading. =E2=80=9CSt=
atic=E2=80=9D is=20
an interesting example (see below).
Sometimes terms are introduced that have technical meaning for language=20
processing or are based on, at best, an analogy with mathematical concepts=
=20
that seem somewhat obscure. Mathematical rigor is a lofty, but=20
unachievable and misleading goal for software. Mathematical underpinnings=
=20
can be useful but seem best left to technical documentation, rather than=20
common use. For instance, axioms are useful for theorem proving, but the=
=20
implied notion is misleading when they are only definitions of type=20
properties. To be really useful they need to be incorporated in a test=20
facility. =20
A Goggle query for =E2=80=9Cregular types=E2=80=9D produces an assortment o=
f unrelated=20
concepts. =E2=80=9CStructured=E2=80=9D seems more user friendly than =E2=
=80=9Csemi-regular=E2=80=9D to=20
indicate operations for allocation, deallocation, copy, move, assign, and=
=20
swap. Similarly, =E2=80=9Centity=E2=80=9D could indicate basic classes tha=
t are=20
=E2=80=9Cstructured=E2=80=9D, and which also have comparison and ordering o=
perations=20
defined.=20
Other approaches, such as reuse of existing keyword, lead to ambiguity and=
=20
confusion.
Syntax Rules
The incredible complexity, to which the C++ standard has evolved, is=20
breathtaking. Undoubtedly much of this is unavoidable; it comes with the=
=20
territory and the need to be precise. Perhaps, though, there are=20
significant strategies for simplification. =20
One such approach that seems to drive complexity, to a significant extent,=
=20
is a desire for the syntax to be complete, in the sense that the compiler=
=20
tries to make decisions as to the meaning of constructs under a variety of=
=20
different circumstances. This can lead to design of elaborate=20
interpretations that assume that =E2=80=9Cthe compiler knows best=E2=80=9D.=
Under=20
particular conditions, the compiler driven interpretations may be=20
unintuitive, and even ambiguous, relative to the programmer intent. The=20
alternative for rule simplification is not to guess at intent, but, rather=
=20
than defining exceptions to exceptions, simply declare an error and require=
=20
that the programmer provide clarification.=20
An immediate example, pehaps, is the seven situations used for overload=20
resolution. It can make sense for the compiler to apply reasonable=20
conversions to meet parameter declarations. However, when this produces=20
multiple candidates, and there is not an easily remembered and intuitive=20
rule for selection, don=E2=80=99t try for a =E2=80=9Cbest=E2=80=9D match.
Type Extensions
Previous notes have suggested that template type parameters are essentially=
=20
=E2=80=9CAbstract Types=E2=80=9D. That is, a notion of incomplete types th=
at abstract from=20
details of size, ordering and layout associated with struct based=20
declarations. Abstract types can be extended through instantiation; much=
=20
as base types are extended by derived classes. Such extensions can be=20
bidirectional as in role-actor constructs,
In this way, declarations of the Abstract Types with all of the constructs=
=20
for template definition can allow template code to appear, to be written=20
and to be compiled essentially the same as any other code. Other notes=20
discuss binding of compiled templates to actual concrete types.=20
Variants provide a complementary notion of type extension. Rather than=20
providing common structure that can adapt to different functionality, they=
=20
support common functions that can adapt to different structure. =20
Aspects
As a basis for management of software component dependencies, a class=20
declaration can specify different interfaces, or Aspects, for different=20
users. This is essentially a generalization of the =E2=80=9Cfriend=E2=80=
=9D concept.
Aspects and Abstract Types both form partial views of a type. Aspects are=
=20
parts of an abstract or concrete type. Abstract Types are parts that still=
=20
need to be mapped to a concrete type. From this perspective, Abstract=20
types are essentially an Aspect of a type.
To avoid over specification of an interface, a user can require some subset=
=20
of Aspects, while still allowing for use of optional constructs, where=20
available. For instance, a complete set of member and non-member functions=
=20
for comparison can be constructed from generic =E2=80=9C<=E2=80=9D and =E2=
=80=9C=3D=3D=E2=80=9D operators,=20
while still allowing for direct use of other constructs if available.
Alternatives can also be used to avoid under specification of a Capability=
=20
by allowing variant approaches. For instance, an iteration Capability=20
could be implemented to use a =E2=80=9Cfor=E2=80=9D loop using end, last, c=
ount or=20
conditional member and non-member termination indicators, or with list=20
recursion, or with either, depending on the Capabilities supplied.
Capabilities
Concepts are a specification mechanism for template type declarations. =20
Concept syntax specifications are proposed for generic type parameters and=
=20
for their interactions. In this sense, they are full equivalent to, and=20
indeed must match, the declaration syntax for the supplied types.
Concepts, then, are basically an interface specification. This suggests=20
two generalizations. First, the same declarations are applicable to, and=
=20
could be used similarly for, both the generic declarations and the supplied=
=20
type declarations. The second observation is that such declarations are=20
significant, whether or not they are used for templates. The third=20
observation here is that, where the declarations are equivalent but do not=
=20
match directly, then mappings can be provided.
This suggests a more general notion of =E2=80=9CCapabilities=E2=80=9D as a =
fundamental=20
construct for specifying both what is required and what is supplied by an=
=20
interface. A user specifies the Capability declarations for what it needs,=
=20
and the implementation specifies them for what it supplies. The Capability=
=20
declaration, itself, can specify mappings for alternative constructs for=20
its use or support.=20
This supports the fundamental abstraction of a software system consisting=
=20
of Capabilities built from other Capabilities.=20
Capabilities extend type extractions. Type abstractions encapsulate=20
representation and method for an interface based on syntax declarations. =
=20
Capabilities capture basic invariants that are also independent of=20
representation and method, and they also generalize this to independence of=
=20
syntax expression and data source.
Also, Capabilities extend the notion of a class which abstracts operations=
=20
on a single data object, to an abstraction of operations on the interaction=
=20
of multiple interacting objects. These interactions can be at a common=20
level, as in transformations, or nested, as with STL containers.
Capability syntax is inherently an extended Abstract Type declaration. =20
Capability declarations consist of a parameterized set of type=20
specifications along with value expressions that use these types, and,=20
where required, they include mappings for one form of type or value=20
expression to another. Proposals for a Concepts specification provide a=20
base for such an approach.=20
Since Capabilities are specifications at the level of interfaces, they can=
=20
also provide a base for systematically inserting code for metrics,=20
reporting, logging, error handling, etc. =20
Mappings
Often there is a direct correspondence from the constructs needed by a=20
Capability and those supplied for it. When the Capabilities are=20
equivalent, but specified differently, a Capability interface declaration=
=20
can provide mappings both for data, for operations and for types.
Data mappings can be for location, organization, representation and format.
Operation mappings include basic computational constructs. The STL=20
provides examples for iteration (begin, next, end), access (read, write),=
=20
structure (copy, move, assignment, swap) and comparison (ordering,=20
equivalence, equality). Invoke, callable, and parameter packs provide=20
models for functions and their parameters. Considerable extension callable=
=20
is possible, such as providing =E2=80=9Cinvoke=E2=80=9D specifications for =
remote procedure=20
calls, queued calls, messages and events, and exceptions.
The capabilities above can be represented with an abstract syntax for value=
=20
expressions. This can be extended to type expressions that ensue coherent=
=20
correspondence among related types and type constructs. These could=20
include capabilities for generation, modification and test (reference=20
classification, qualifiers, attributes, derivation, inclusion, traits, . .=
=20
.. ), compare, transform (cast), etc. =20
Parts
Systematic extension of such capabilities could form the basis for=20
fundamental components necessary to drive some domain specific languages or=
=20
even a small general purpose application development language.
Additional Capabilities can be developed for logic (and, or, xor, not),=20
arithmetic (plus, minus, multiply, divide, remainder), bit fields (get,=20
set), references(pointer, index, map, path), decisions (condition, tree),=
=20
database (read, update, insert, remove, find), sequence( visit, accumulate,=
=20
merge, sort, , . . .), transactions (do, undo, prepare, commit, backout),=
=20
control (start, init, re-init, run, pause, stop), state machines (state,=20
event, transition), traversal (route, visit), use case (objective, step),=
=20
etc. More basic capabilities support such capabilities as readable,=20
assignable, call, parameter, referenced, related, etc. These capability=20
specifications can provide a mechanism for alternative expressions, as well=
=20
as hiding the complexities of C++ type syntax. =20
The ultimate objective however, is general support for parts driven=20
software development and construction. This has been a long sought after=
=20
goal for many, and often there have been extravagant claims for success. =
=20
Existing technology has indeed produced a considerable collection of=20
parts. The focus here, however, is not on parts themselves, or on=20
discovering the holy grail of a fundamental and universal set of parts. =20
Rather, the key focus is on the mechanisms for connecting parts.
Abstract Syntax
An abstract syntax represents the semantics of a syntax construct and the=
=20
components or terms used to denote those semantics. As with other=20
abstractions there is often generality here that can lead to increased=20
functionality.
A concrete syntax represents a particular representation of the components,=
=20
usually as some set of keywords, brackets and special symbols. =20
Alternatively, it can use diagrams and tables and other presentation forms.=
=20
Capabilities also represent a way of representing the semantics of a=20
construct independently of any particular syntax. In addition they extend=
=20
this with support for alternative syntax components and for alternative=20
data.
An abstract syntax supports interoperability among different syntactical=20
representations. Capabilities support interoperability for different=20
syntax, syntax components and data sources.
Name Use Differentiation
Clarity in the use of names for identification of different categories of=
=20
identifiers is critical in any syntax. This is particularly important for=
=20
generic code. For instance, elaborate syntax can be used with brackets and=
=20
key words to distinguish type and object names and their scopes. For=20
clarity in code reading, naming conventions, such as leading caps or=20
trailing =E2=80=9Ctype=E2=80=9D or plural =E2=80=9Cs=E2=80=9D suffixes are =
often used to distinguish type=20
names from object names. Far simpler, and consistent, would be a=20
distinguishing naming convention. This would provide language consistency=
=20
and clarity. More significantly, it could, in fact, greatly simplify the=
=20
syntax. =20
An extreme approach to this can be found in what is known as Hungarian=20
Notation, a rather elaborate approach to conveying type information. More=
=20
appropriate however, is to focus on the differing uses of names for the=20
primary abstractions of object, type and abstract type. For instance,=20
reference to types, classes, structs, and unions might be identified with a=
=20
prefix of =E2=80=9C#=E2=80=9D. Abstract Types represent a higher level of =
abstraction and=20
could be declared with a prefix such as =E2=80=9C##=E2=80=9D or =E2=80=9C!=
=E2=80=9D. The prefix can be=20
used when the identifier is introduced to simplify syntax. It is probably=
=20
not as important for subsequent use of the identifier, but its consistent=
=20
use can enhance clarity in many contexts.
Example: template<typename T> concept bool C =3D true;
becomes: ##C
Also, since they are fundamentally very different things, it is useful to=
=20
distinguish assignment of type expressions (=E2=86=90) from object expressi=
ons (=3D),=20
as well abstract type and namespace components (::) from object components=
=20
(.).
With this, most uses of =E2=80=9Ctypedef=E2=80=9D, =E2=80=9Ctypename=E2=80=
=9D, =E2=80=9Cusing=E2=80=9D, =E2=80=9Crebind=E2=80=9D, and even=20
=E2=80=9Ctemplate=E2=80=9D and angle brackets can be eliminated. Consider =
the following,=20
which just sputters with =E2=80=9Ctype=E2=80=9D syllables:
typedef typename BaseType::value_type value_type
An alternative might be a type expression such as:
#value =E2=86=90 ##Base::#value;
Auto
Auto is a useful placeholder for a type that can be deduced. This,=20
however, loses information since the actual resulting type name is hidden. =
=20
An alternative is =E2=80=9C#type=E2=80=9D to capture the name of the type.=
=20
For example:
#length length =3D vector.size( ) ; =20
For consistency, the basic auto keyword placeholder could be replaced with=
=20
a simple =E2=80=9C#=E2=80=9D, and thus eliminate confusion with allocation =
concepts.
Examples
An basic example can be taken from STL proposals:
template<typename T>=20
concept bool Readable() {
return requires (T i) {=20
typename Value_type; {
{*i} -> const Value_type&;
};=20
};
This defines a property of iterators. The more general concept is=20
Readable, which captures the general Capability to extract a value from an=
=20
expression, and which is suggested below.=20
The example assumes that the base language defines operations for the use=
=20
of readable and writeable values (such as assignable). Capability=20
declarations below provide a means for accessing values through use of=20
diverse syntax constructs. For instance, a template might access a data=20
value in a container or where the value itself is generate by a particular=
=20
supplier through a function. The using code doesn=E2=80=99t care =20
Examples - requirements in square brackets use &&, ||, ? and ~ for=20
=E2=80=9Cand=E2=80=9D, =E2=80=9Cor=E2=80=9D. =E2=80=9Coptional=E2=80=9D and=
=E2=80=9Cnot=E2=80=9D expressions.
Assignable {##Writeable w && ##Readable r; w=3Dr , } ;
Readable {
// Value
(##Value v) { [v ?const ?& ) || (v() ?const ?&) ||( v.get()=20
?const ?&) };
// Access
(##Value v, #Readable r) { r =E2=86=92 v };
// Pointer
(##Pointer p , ##Pointer::#Readable r ) {* ?const p =E2=
=86=92=20
r};
// Function
(##Function f , ##Argument a, # Readable r ) {f(a) =E2=86=92=
r} ;
// Member
(const ##Base b, #Member m, const # Readable r)
{[ b.m =E2=86=92 r) ] || [ (b.m( ) =E2=86=92 r ] =
|| [ (b.m.get( )=20
=E2=86=92 r ] )};
// Component
( ##C =E2=86=90 (##Map||##Vector||##array) c, ##Index i, # Re=
adable=20
r) {c[i] =E2=86=92r} ;
*. . .*
// A common Get function, similar to =E2=80=9Cinvoke=E2=80=9D for =
=E2=80=9Ccallable=E2=80=9D could=20
be used.
Get (##Pointer p, # Readable r)
{*p =E2=86=92 r) ;
Get (##Function f , ##Parameter a, # Readable r)
{f(a) =E2=86=92 r};
Get (##Base b, Member m, # Readable r
{( b.m =E2=86=92 v ?&) || (b.m( ) =E2=86=92 v ?&) || (b.=
m.get( ) =E2=86=92 r};
Get ( ##C =E2=86=90 (##Map||##Vector||##array) c , ##Index I,=
##C::#=20
Readable r)
{ c[i] =E2=86=92r }; =20
}; =20
*. . .*
##Writeable { Readable ~const, . . . } ;
##Modifiable { ##Readable && ##Writeable };
Then we can have:
x int =E2=86=90##Writeable::Set (map, index) ; /* spe=
cified=20
by user or supplier
y int =E2=86=90 ##Readable:: Get (function, argument) ; /* specified=
by=20
supplier or user
x =3D y ; //invokes Get and Set
The above is a fairly trivial example, but it illustrates the principle of=
=20
separation of mechanisms for access to data constructs from the functional=
=20
operations on the data values.=20
Container access provides some interesting possibilities for syntax=20
commonality for generalizations such as =E2=80=9Cinsert=E2=80=9D.
Insert (##V=E2=86=90##Vector v, ##V::#Element e) =E2=86=92##V v
{v.emplace_back (e) =E2=86=92v};
Insert (##V=E2=86=90##Vector v, ##V::#Positon p, ##V::#Element e) =E2=86=
=92 ##V v
{ v.emplace(v, p, e) =E2=86=92 v}; =20
Insert (##L=E2=86=90##List l, ##L::#Position p, ##L::#Element e)=E2=86=
=92 ##L l =20
{ l.insert(p, e) }=E2=86=92 l };
Insert(##M=E2=86=90##Map m, ##M::#Key k, ##M::##Element e) =E2=86=92##M =
m
{ m.emplace(k, e) =E2=86=92 m }; =20
Insert(##M=E2=86=90##Map m, ##M::#Pair p) =E2=86=92##M m
{ m.emplace(p.first, p.second) =E2=86=92 m }; =20
Insert(##M=E2=86=90##Map m, ##M::#Element e) =E2=86=92##M m
{ m.emplace(e.key( ), e) =E2=86=92 m }; =20
Or, more generally:
Insert (##C=E2=86=90##Container c, ##C::#Element e) =E2=86=92##C c
{ (Insert (c, e) =E2=86=92 c} ;
Insert (##C=E2=86=90##Container c, ##C::#Position p, ##C::#Element e ) =
=E2=86=92##C c
{ (Insert(c, p, e) =E2=86=92c };
And, still better yet, overload =E2=80=9C<<=E2=80=9D for container and stre=
am insert and=20
=E2=80=9C.=E2=80=9D for element access and use:
c << e ;
c <<(p) e ; /* or */ ; c.p << e ;
Another useful extension could be based on =E2=80=9Cinvoke=E2=80=9D, to sup=
ply a=20
continuation function call. This supports a useful pattern for pipes. =20
Also, this could be combined with tests to handle special conditions,=20
errors and exceptions.
Somewhat different are requirements for expressions over type constructs. =
=20
For example:
template<typename T>=20
concept bool Input_range() {
return requires(T range) {=20
typename Iterator_type;
requires Input_iterator;=20
};
};
This can become:
##Input_range =E2=86=90 ##Range::#Iterator::category =3D=3D Input ;
An objective for these syntax constructs is that, with little practice, the=
=20
syntax can be read, and generally written, directly from their intended=20
semantics.=20
Principles
These examples illustrate fundamental principles of context access, of=20
process abstraction, and of generality.=20
=C2=B7 The approach effectively provides a general mechanism for=20
computations over values, that is separated from the context in which the=
=20
values reside, and from where they must be extracted and inserted.=20
This essentially provides a base for exploiting many of the constructs and=
=20
facilities of functional programming.
=C2=B7 It provides a mechanism for system and user libraries to=20
encapsulate and thereby exploit the extensive syntax mechanisms that are=20
evolving for C++, in a manner that lends to increased readability and=20
understanding of the using code functionality.=20
=C2=B7 More generally, it can support a range of abstractions for tye=
ps,=20
data and processing, which can then be separately mapped to concrete=20
implementations.=20
Function Parameters
Much of the complexity of parameter type specification is tied up with the=
=20
complexities of mapping function call arguments to declaration parameters.
Function declarations specify how the function can use supplied parameters=
=20
with various categories of modes for read, reference, modify, copy and=20
move. C++ specifications use const and reference decorators to indirectly=
=20
indicate what is intended. This started out to be reasonably=20
straightforward, until references to references and special support for=20
=E2=80=9Crvalues=E2=80=9D were needed.
Much, if not all needed simplification and clarity can occur with syntax=20
for the declaration of a parameter that directly indicates its purpose and=
=20
its use. In many cases this can start with simply distinguishing inputs=20
from outputs in the function declaration. This is done in some languages=
=20
with specific =E2=80=9Cin=E2=80=9D and =E2=80=9Cout=E2=80=9D mode specifica=
tions for the parameter. Since=20
=E2=80=9Cin=E2=80=9D is the most common it can be elided. Also, whether or=
not a copy is=20
made internally by, or for the function is of no concern to the caller or=
=20
to the declaration. With this =E2=80=9Cout=E2=80=9D parameters indicate =
values that the=20
function can modify. Return parameters are values the function can return,=
=20
including tuples. These categories can be specified separately. For=20
instance:=20
functionName (inParms . . . )(outParms . . . ) =E2=86=92 result;
Function invocation could require the extra brackets for the sake of=20
clarity. The compiler can decide, at least for most cases, among copy,=20
move (if available), reference, const, pointer extraction, copy elision,=20
etc. Also, if there is some particular need in the declaration, a=20
programmer can specify conversions, to be used or preferred. =20
=E2=80=9CMove semantics=E2=80=9D introduces a completely different mode of =
parameter use;=20
i.e., values that can be invalidated. These are used for copying of=20
temporaries and are chosen implicitly through function overload. These can=
=20
be clearly indicated with an additional mode category.
functionName (inParms . . . )(outParms . . . )(moveParms . . . )=E2=
=86=92=20
result;
There is also a category of generic parameters that can be passed to a=20
function and can be of any of the above categories. These are then forward=
=20
to a specific function invocation for which all the rules of function=20
overload selection and validation are applied when the function is=20
instantiated. Such usage can be indicated, for instance, with double=20
parens; i.e. ((genericParms)).=20
Captured Names
Although it is often looked upon as dangerous, use or =E2=80=9Ccapture=E2=
=80=9D of names=20
outside of a function declaration or definition is common, but often lacks=
=20
clarity. =20
For lambdas, this use is explicitly indicated with special bracket syntax. =
=20
This can be extended for any function declaration.
For example:
functionName (inputs . . . )(outputs . . . ) =E2=86=92 result [=3Dname1=
, &name2,=20
.. . . ] {. . .};
or better,
functionName(inputs. . .)(outputs. . .) =E2=86=92 result [name1 . . .][=
name2 .=20
.. .] {. . .};
Also, while capture occurs in the scope of the function declaration, it is=
=20
can also be useful to provide capture in the context of the function=20
definition and, possibly even with generics, in the instantiation context.=
=20
This could be indicated with repetition of prefix characters for the=20
unusual latter cases, e.g. =E2=80=9C=3D=3D=E2=80=9D and =E2=80=9C=3D=3D=3D=
=E2=80=9D. Since, such uses are unusual=20
and require special notice, simpler might be to use double and triple=20
brackets in the declaration.
As part of this, the square brackets can also introduce template=20
requirements:
fun(##A a, ##B b) (##C c)=E2=86=92 result [x, (c=3D a*x+b ) ] { . . .=
} ;
Name Scope Use
Clarity in the scope of names used in code is critical to understanding the=
=20
intent of the programs in which they occur. This is relevant at different=
=20
levels of brackets, functions, parameters, name scope, derived class=20
definitions and local declarations, etc.=20
Lack of clarity of the scope of a name can lead to interesting magazine=20
columns. More critically this it can lead to subtle bugs especially when=
=20
code is later modified and extended.
Prefix characters are useful here also to highlight the use of names that=
=20
are not part of the local specification. Function parameters in some=20
languages are addressed with a leading character such as =E2=80=9C$=E2=80=
=9D. Captured=20
names require more clarity and perhaps a prefix such as =E2=80=9C@=E2=80=9D=
.. Local=20
variable names in a class often have a =E2=80=9C_=E2=80=9D prefix, in both =
the declaration=20
and use. Such specifications are critical to understanding code and could=
=20
be inserted by the compiler (or tool) automatically, if not supplied.=20
Short alias prefixes derived from namespaces are useful to identify the=20
source and hence meaning of names. =20
Some consolidation and systemization of such conventions can be either=20
explicitly specified by syntax, or implicitly by rules declared to the=20
compiler by pragmas.
Factored Attributes
Keywords for public, protected, private, namespace and using directives,=20
all introduce bracketed sections of declarations with common attributes.
This could be systematically extended to provide structuring for any=20
attribute. It would be especially useful for long lists of declarations.=
=20
Also, it could clarify the use of =E2=80=9Cstatic=E2=80=9D, which connotes =
little of what=20
it actually means. Inside a class or function scope, a keyword such as=20
=E2=80=9Cfixed=E2=80=9D might be clearer. Outside a class or function cont=
ext, names can=20
be declared =E2=80=9Cfile scope=E2=80=9D, or, perhaps better, =E2=80=9Cloca=
l=E2=80=9D.
A related category might be =E2=80=9Cthread local=E2=80=9D.
Leading Names in Declarations=20
Much of the previous aims to introduce names at the left of a line of code=
=20
to make it easy to scan the code looking for a declaration.
Declarations can be obtuse when they bury a name declaration in the middle=
=20
of a complex syntax structure. Function type names are a simple and=20
obvious example.=20
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/4ef0b9bf-3c9e-47c6-bb93-ee139b741103%40isocpp.or=
g.
------=_Part_119_2129148651.1480549896006
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><h3><span style=3D"font-family: "Times New Roman"=
;, serif;">Introduction</span></h3><p class=3D"MsoNormal" style=3D"line-hei=
ght: normal;"><font face=3D"Times New Roman, serif">This somewhat provocati=
ve note was posted earlier on the S8 Concepts forum, since it is largely re=
lated to templates and Concepts. =C2=A0As it did not provoke a response the=
re, I thought it might be of some interest here. =C2=A0</font></p><p class=
=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family: &=
quot;Times New Roman", serif;">This note suggests some generalization =
and simplification of C++ language syntax, largely based on extensions of w=
hat is currently in =E2=80=9CConcepts Lite=E2=80=9D.=C2=A0 =C2=A0There is s=
ome general discussion of reasons for what exists, and of future evolution.=
=C2=A0=C2=A0Since it is a rather long note for a forum entry, skipping to =
the Examples section might provide a quick overview of some of the resultin=
g possibilities.</span></p><p class=3D"MsoNormal" style=3D"line-height: nor=
mal;"><span style=3D"font-family: "Times New Roman", serif;">A Wo=
rd file with the same contents is also attached.</span></p><h3><span lang=
=3D"X-NONE" style=3D"font-family: "Times New Roman", serif;">Obje=
ctives</span></h3><p class=3D"MsoNormal" style=3D"line-height: normal;"><sp=
an style=3D"font-family: "Times New Roman", serif;">Previous note=
s posted here have made suggestions for simplifying and expanding approache=
s to C++ templates and Concepts.=C2=A0 This note is designed to expand on t=
hat and to suggest a start at a significant simplification of code construc=
ts and syntax.=C2=A0=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-h=
eight: normal;"><span style=3D"font-family: "Times New Roman", se=
rif;">As additional capabilities, have been added to the language, C++ synt=
ax constructs have become increasingly distracting relative to basic code f=
unctionality. =C2=A0=C2=A0Some emphasis on simplification is already happen=
ing, such as not having to specify the same type repeatedly in template par=
ameters, in requirements clauses, and in function parameters.=C2=A0 However=
, the complexities seem to be growing at a greater rate.=C2=A0=C2=A0</span>=
</p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"fo=
nt-family: "Times New Roman", serif;">The attempt here is to defi=
ne syntax that reads naturally in expressing the programmer=E2=80=99s abstr=
actions and intent, rather than its implementation characteristics. =C2=A0A=
measure of this is code that =E2=80=9Cdoes what it says=E2=80=9D and =E2=
=80=9Csays what it does=E2=80=9D, which is hard enough to do anyway, withou=
t having to be incorporated in syntax to tell the compiler what it is tryin=
g to do.=C2=A0 The code does need to speak to the compiler as well as the h=
uman reader, but, if well crafted, doing the latter should suffice for the =
former.=C2=A0 Ultimately, the focus needs to be on the abstractions needed =
by the programmer to convey the essence of a computation or of a data type.=
=C2=A0 Often, this abstraction can also lead to increased generality.=C2=A0=
=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><spa=
n style=3D"font-family: "Times New Roman", serif;">This note disc=
usses an incomplete series of topics, and there are at best incomplete argu=
ments for any particular topic.=C2=A0 The hope, however, is that taken toge=
ther, this might suggest fundamental approaches that significantly increase=
the abstraction level of the language.=C2=A0</span></p><h3><span lang=3D"X=
-NONE" style=3D"font-family: "Times New Roman", serif;">Precision=
and=C2=A0</span><span style=3D"font-family: "Times New Roman", s=
erif;">Lack of=C2=A0</span><span lang=3D"X-NONE" style=3D"font-family: &quo=
t;Times New Roman", serif;">Clarity</span><span style=3D"font-family: =
"Times New Roman", serif;"></span></h3><p class=3D"MsoNormal" sty=
le=3D"line-height: normal;"><span style=3D"font-family: "Times New Rom=
an", serif;">A Latin teacher once described a good translation as bein=
g both accurate and idiomatic.=C2=A0 The analogy to programming languages i=
s a need for both precision and clarity.=C2=A0=C2=A0</span><span style=3D"f=
ont-family: "Times New Roman", serif;">Ultimately syntax needs to=
be precise, both for the compiler and the language expert.=C2=A0 Equally i=
mportant though, it requires clarity to convey the intent of the programmer=
, as well as the demands of syntax.=C2=A0</span></p><p class=3D"MsoNormal" =
style=3D"line-height: normal;"><span style=3D"font-family: "Times New =
Roman", serif;">Consider const, volatile, reference and reference refe=
rence.=C2=A0 It is easy to add qualifiers such as const and reference to a =
type specification.=C2=A0 For removing these qualifiers, a variety of synta=
x circumlocutions are invented, some of which remove the qualification, oth=
ers of which do not.=C2=A0 While there is value in supporting capabilities =
through library facilities rather than language change, simple use of a neg=
ative symbol could lead to code that is simper and intuitively expressive; =
for instance: (type ~const ~&).=C2=A0</span></p><p class=3D"MsoNormal" =
style=3D"line-height: normal;"><span style=3D"font-family: "Times New =
Roman", serif;">Often focus on language processing precision leads to =
confusing and arcane constructs that suffer in programmer clarity such as:<=
/span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=
=3D"font-family: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 requires requires {typename =E2=80=A6type }; . . .</span></p><p c=
lass=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-famil=
y: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 conc=
ept bool {return requires . . . =C2=A0};</span></p><p class=3D"MsoNormal" s=
tyle=3D"line-height: normal; text-indent: 0in;"><span style=3D"font-family:=
"Times New Roman", serif;">Here the ellipses indicate areas of c=
ode where the programmer=E2=80=99s construct is buried in a cascade of synt=
ax constructs.=C2=A0 This lack of simplicity and clarity in syntax has undo=
ubtedly raised some suspicions about the underlying consistency for Concept=
s, and this hesitancy may account for much of the reluctance to approve Con=
cepts for C++.</span></p><p class=3D"MsoNormal" style=3D"line-height: norma=
l;"><span style=3D"font-family: "Times New Roman", serif;">More d=
ifficult are library facilities for interacting with compiler constructs fo=
r multiple types of references (rvalue, glvalue, prvalue, . . .) and =E2=80=
=9Creference collapsing=E2=80=9D rules through an amazing set of =E2=80=9Cs=
td::xxx=E2=80=9D=C2=A0 constructs.=C2=A0=C2=A0 It is an interesting questio=
n, if there are many experts who could look at a set of =E2=80=9Cdecltype=
=E2=80=9D declarations and correctly parse their meaning.=C2=A0=C2=A0 More =
direct approaches to capturing programmer intent here is discussed under th=
e topic of function parameters.</span></p><h3><span lang=3D"X-NONE" style=
=3D"font-family: "Times New Roman", serif;">Compatibility</span><=
/h3><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"fo=
nt-family: "Times New Roman", serif;">Of course, compatibility is=
a dominant issue.=C2=A0 Other approaches, such as Java, D and C#, are spin=
offs that have sought simplification in critical areas, but have lost much=
of the basic underlying power of C++.=C2=A0 An alternative is new syntax, =
that leaves the base capabilities in place, and even suggests enhancements.=
=C2=A0=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal=
;"><span style=3D"font-family: "Times New Roman", serif;">However=
, forcing new features into old syntax can lead to awkward constructs that =
often disguise the programmer=E2=80=99s intent.=C2=A0 Constructs for refere=
nces to references with internal collapsing rules, to permit move semantics=
is an example of such obfuscation.=C2=A0=C2=A0</span></p><p class=3D"MsoNo=
rmal" style=3D"line-height: normal;"><span style=3D"font-family: "Time=
s New Roman", serif;">It is useful to consider compatibility of langua=
ge elements, constructs, abstractions and performance separately from compa=
tibility of concrete syntax.=C2=A0=C2=A0 New syntax can often be achieved s=
olely with extensions and additions.=C2=A0 However, revisions at the level =
of syntax parsing need not necessarily exclude the possibility for alternat=
ive compiler syntax processing signaled by pragmas.=C2=A0 Such pragmas are =
already used by tools, for such purposes as debugging assertions and enforc=
ing local consistency for coding styles and standards.=C2=A0 Not systematiz=
ing these with language facilities adds considerable code complexity along =
with non-standard compiler options and directives, and often encourages pre=
processing macros.</span></p><p class=3D"MsoNormal" style=3D"line-height: n=
ormal;"><span style=3D"font-family: "Times New Roman", serif;">As=
a fairly simple example of syntax extension, the compiler could be made aw=
are of new line indications and indentation to simplify punctuation and emp=
hasis clarity. =C2=A0=E2=80=9CModernization=E2=80=9D of C++ syntax could st=
art with removal of tri-graph support.=C2=A0</span></p><p class=3D"MsoNorma=
l" style=3D"line-height: normal;"><span style=3D"font-family: "Times N=
ew Roman", serif;">Such considerations are at the boundaries of compil=
er, preprocessor and tool support.=C2=A0 Standardization of a minimal canon=
ical set of controls can increase current portability, consistency and clar=
ity.</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span =
style=3D"font-family: "Times New Roman", serif;">The stability is=
sue then is compatibility for interoperability of new and existing code, th=
at may be expressed with somewhat different syntax.=C2=A0 That is, compatib=
ility based on what the language says, rather than necessarily on how it sa=
ys it.</span></p><h3><span lang=3D"X-NONE" style=3D"font-family: "Time=
s New Roman", serif;">Terminology</span></h3><p class=3D"MsoNormal" st=
yle=3D"line-height: normal;"><span style=3D"font-family: "Times New Ro=
man", serif;">Terminology used for syntax can be obtuse and even misle=
ading.=C2=A0 =E2=80=9CStatic=E2=80=9D is an interesting example (see below)=
..</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span sty=
le=3D"font-family: "Times New Roman", serif;">Sometimes terms are=
introduced that have technical meaning for language processing or are base=
d on, at best, an analogy with mathematical concepts that seem somewhat obs=
cure.=C2=A0 Mathematical rigor is a lofty, but unachievable and misleading =
goal for software.=C2=A0 Mathematical underpinnings can be useful but seem =
best left to technical documentation, rather than common use.=C2=A0 For ins=
tance, axioms are useful for theorem proving, but the implied notion is mis=
leading when they are only definitions of type properties.=C2=A0 To be real=
ly useful they need to be incorporated in a test facility. =C2=A0</span></p=
><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-=
family: "Times New Roman", serif;">A Goggle query for =E2=80=9Cre=
gular types=E2=80=9D produces an assortment of unrelated concepts.=C2=A0 =
=C2=A0=E2=80=9CStructured=E2=80=9D seems more user friendly than =E2=80=9Cs=
emi-regular=E2=80=9D to indicate operations for allocation, deallocation, c=
opy, move, assign, and swap.=C2=A0 Similarly, =E2=80=9Centity=E2=80=9D coul=
d indicate basic classes that are =E2=80=9Cstructured=E2=80=9D, and which a=
lso have comparison and ordering operations defined.=C2=A0</span></p><p cla=
ss=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family:=
"Times New Roman", serif;">Other approaches, such as reuse of ex=
isting keyword, lead to ambiguity and confusion.</span></p><h3><span style=
=3D"font-family: "Times New Roman", serif;">Syntax Rules</span></=
h3><p class=3D"MsoNormal" style=3D"line-height: normal;">The incredible com=
plexity, to which the C++ standard has evolved, is breathtaking.=C2=A0 Undo=
ubtedly much of this is unavoidable; it comes with the territory and the ne=
ed to be precise.=C2=A0 Perhaps, though, there are significant strategies f=
or simplification.=C2=A0=C2=A0</p><p class=3D"MsoNormal" style=3D"line-heig=
ht: normal;">One such approach that seems to drive complexity, to a signifi=
cant extent, is a desire for the syntax to be complete, in the sense that t=
he compiler tries to make decisions as to the meaning of constructs under a=
variety of different circumstances.=C2=A0 =C2=A0This can lead to design of=
elaborate interpretations that assume that =E2=80=9Cthe compiler knows bes=
t=E2=80=9D.=C2=A0=C2=A0 Under particular conditions, the compiler driven in=
terpretations may be unintuitive, and even ambiguous, relative to the progr=
ammer intent.=C2=A0 The alternative for rule simplification is not to guess=
at intent, but, rather than defining exceptions to exceptions, simply decl=
are an error and require that the programmer provide clarification.=C2=A0</=
p><p class=3D"MsoNormal" style=3D"line-height: normal;">An immediate exampl=
e, pehaps, is the seven situations used for overload resolution.=C2=A0 It c=
an make sense for the compiler to apply reasonable conversions to meet para=
meter declarations.=C2=A0 However, when this produces multiple candidates, =
and there is not an easily remembered and intuitive rule for selection, don=
=E2=80=99t try for a =E2=80=9Cbest=E2=80=9D match.</p><h3><span style=3D"fo=
nt-family: "Times New Roman", serif;">Type Extensions</span></h3>=
<p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-f=
amily: "Times New Roman", serif;">Previous notes have suggested t=
hat template type parameters are essentially =E2=80=9CAbstract Types=E2=80=
=9D.=C2=A0 That is, a notion of incomplete types that abstract from details=
of size, ordering and layout associated with struct based declarations.=C2=
=A0 Abstract types can be extended through instantiation; much as base type=
s are extended by derived classes.=C2=A0 Such extensions can be bidirection=
al as in role-actor constructs,</span></p><p class=3D"MsoNormal" style=3D"l=
ine-height: normal;"><span style=3D"font-family: "Times New Roman"=
;, serif;">In this way, declarations of the Abstract Types with all of the =
constructs for template definition can allow template code to appear, to be=
written and to be compiled essentially the same as any other code.=C2=A0=
=C2=A0 Other notes discuss binding of compiled templates to actual concrete=
types.=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal=
;"><span style=3D"font-family: "Times New Roman", serif;">Variant=
s provide a complementary notion of type extension.=C2=A0 Rather than provi=
ding common structure that can adapt to different functionality, they suppo=
rt common functions that can adapt to different structure.=C2=A0=C2=A0 =C2=
=A0</span></p><h3><span style=3D"font-family: "Times New Roman", =
serif;">Aspects</span></h3><p class=3D"MsoNormal" style=3D"line-height: nor=
mal;"><span style=3D"font-family: "Times New Roman", serif;">As a=
basis for management of software component dependencies, a class declarati=
on can specify different interfaces, or Aspects, for different users.=C2=A0=
This is essentially a generalization of the =E2=80=9Cfriend=E2=80=9D conce=
pt.</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span s=
tyle=3D"font-family: "Times New Roman", serif;">Aspects and Abstr=
act Types both form partial views of a type.=C2=A0 Aspects are parts of an =
abstract or concrete type.=C2=A0 Abstract Types are parts that still need t=
o be mapped to a concrete type.=C2=A0 From this perspective, Abstract types=
are essentially an Aspect of a type.</span></p><p class=3D"MsoNormal" styl=
e=3D"line-height: normal;"><span style=3D"font-family: "Times New Roma=
n", serif;">To avoid over specification of an interface, a user can re=
quire some subset of Aspects, while still allowing for use of optional cons=
tructs, where available.=C2=A0 For instance, a complete set of member and n=
on-member functions for comparison can be constructed from generic =E2=80=
=9C<=E2=80=9D and =E2=80=9C=3D=3D=E2=80=9D operators, while still allowi=
ng for direct use of other constructs if available.</span></p><p class=3D"M=
soNormal" style=3D"line-height: normal;"><span style=3D"font-family: "=
Times New Roman", serif;">Alternatives can also be used to avoid under=
specification of a Capability by allowing variant approaches.=C2=A0=C2=A0 =
For instance, an iteration Capability could be implemented to use a =E2=80=
=9Cfor=E2=80=9D loop using end, last, count or conditional member and non-m=
ember termination indicators, or with list recursion, or with either, depen=
ding on the Capabilities supplied.</span></p><h3><span style=3D"font-family=
: "Times New Roman", serif;">Capabilities</span><span lang=3D"X-N=
ONE" style=3D"font-family: "Times New Roman", serif;"></span></h3=
><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-=
family: "Times New Roman", serif;">Concepts are a specification m=
echanism for template type declarations.=C2=A0 Concept syntax specification=
s are proposed for generic type parameters and for their interactions.=C2=
=A0 In this sense, they are full equivalent to, and indeed must match, the =
declaration syntax for the supplied types.</span></p><p class=3D"MsoNormal"=
style=3D"line-height: normal;"><span style=3D"font-family: "Times New=
Roman", serif;">Concepts, then, are basically an interface specificat=
ion.=C2=A0 This suggests two generalizations.=C2=A0 First, the same declara=
tions are applicable to, and could be used similarly for, both the generic =
declarations and the supplied type declarations.=C2=A0 The second observati=
on is that such declarations are significant, whether or not they are used =
for templates.=C2=A0 The third observation here is that, where the declarat=
ions are equivalent but do not match directly, then mappings can be provide=
d.</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span st=
yle=3D"font-family: "Times New Roman", serif;">This suggests a mo=
re general notion of =E2=80=9CCapabilities=E2=80=9D as a fundamental constr=
uct for specifying both what is required and what is supplied by an interfa=
ce.=C2=A0 A user specifies the Capability declarations for what it needs, a=
nd the implementation specifies them for what it supplies.=C2=A0 The Capabi=
lity declaration, itself, can specify mappings for alternative constructs f=
or its use or support.=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line=
-height: normal;"><span style=3D"font-family: "Times New Roman", =
serif;">This supports the fundamental abstraction of a software system cons=
isting of Capabilities built from other Capabilities.=C2=A0</span></p><p cl=
ass=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family=
: "Times New Roman", serif;">Capabilities extend type extractions=
..=C2=A0 Type abstractions encapsulate representation and method for an inte=
rface based on syntax declarations.=C2=A0 Capabilities capture basic invari=
ants that are also independent of representation and method, and they also =
generalize this to independence of syntax expression and data source.</span=
></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"f=
ont-family: "Times New Roman", serif;">Also, Capabilities extend =
the notion of a class which abstracts operations on a single data object, t=
o an abstraction of operations on the interaction of multiple interacting o=
bjects.=C2=A0 These interactions can be at a common level, as in transforma=
tions, or nested, as with STL containers.</span></p><p class=3D"MsoNormal" =
style=3D"line-height: normal;"><span style=3D"font-family: "Times New =
Roman", serif;">Capability syntax is inherently an extended Abstract T=
ype declaration.=C2=A0 Capability declarations consist of a parameterized s=
et of type specifications along with value expressions that use these types=
, and, where required, they include mappings for one form of type or value =
expression to another.=C2=A0 Proposals for a Concepts specification provide=
a base for such an approach.=C2=A0</span></p><p class=3D"MsoNormal" style=
=3D"line-height: normal;"><span style=3D"font-family: "Times New Roman=
", serif;">Since Capabilities are specifications at the level of inter=
faces, they can also provide a base for systematically inserting code for m=
etrics, reporting, logging, error handling, etc.=C2=A0=C2=A0</span></p><h3>=
<span style=3D"font-family: "Times New Roman", serif;">Mappings</=
span></h3><p class=3D"MsoNormal" style=3D"line-height: normal;">Often there=
is a direct correspondence from the constructs needed by a Capability and =
those supplied for it.=C2=A0 =C2=A0When the Capabilities are equivalent, bu=
t specified differently, a Capability interface declaration can provide map=
pings both for data, for operations and for types.</p><p class=3D"MsoNormal=
" style=3D"line-height: normal;">Data mappings can be for location, organiz=
ation, representation and format.</p><p class=3D"MsoNormal" style=3D"line-h=
eight: normal;">Operation mappings include basic computational constructs.=
=C2=A0 The STL provides examples for iteration (begin, next, end), access (=
read, write), structure (copy, move, assignment, swap) and comparison (orde=
ring, equivalence, equality).=C2=A0 Invoke, callable, and parameter packs p=
rovide models for functions and their parameters.=C2=A0 Considerable extens=
ion callable is possible, such as providing =E2=80=9Cinvoke=E2=80=9D specif=
ications for remote procedure calls, queued calls, messages and events, and=
exceptions.</p><p class=3D"MsoNormal" style=3D"line-height: normal;">The c=
apabilities above can be represented with an abstract syntax for value expr=
essions.=C2=A0 This can be extended to type expressions that ensue coherent=
correspondence among related types and type constructs.=C2=A0 These could =
include capabilities for generation, modification and test (reference class=
ification, qualifiers, attributes, derivation, inclusion, traits,=C2=A0 . .=
.=C2=A0 ), compare, transform (cast), etc.=C2=A0=C2=A0=C2=A0</p><h3><span =
lang=3D"X-NONE">Parts</span></h3><p class=3D"MsoNormal" style=3D"line-heigh=
t: normal;"><span style=3D"font-family: "Times New Roman", serif;=
">Systematic extension of such capabilities could=C2=A0</span>form the basi=
s for fundamental components necessary to drive some domain specific langua=
ges or even a small general purpose application development language.</p><p=
class=3D"MsoNormal" style=3D"line-height: normal;">Additional Capabilities=
can be developed for logic (and, or, xor, not), arithmetic (plus, minus, m=
ultiply, divide, remainder), bit fields (get, set), references(pointer, ind=
ex, map, path), decisions (condition, tree), database (read, update, insert=
, remove, find), sequence( visit, accumulate, merge, sort, , . . .), transa=
ctions (do, undo, prepare, commit, backout), control (start, init, re-init,=
run, pause, stop), state machines (state, event, transition), traversal (r=
oute, visit), use case (objective, step), etc.=C2=A0 More basic capabilitie=
s support such capabilities as readable, assignable, call, parameter, refer=
enced, related, etc.=C2=A0 These c<span style=3D"font-family: "Times N=
ew Roman", serif;">apability specifications can provide a mechanism fo=
r alternative expressions, as well as hiding the complexities of C++ type s=
yntax. =C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal=
;">The ultimate objective however, is general support for parts driven soft=
ware development and construction.=C2=A0 This has been a long sought after =
goal for many, and often there have been extravagant claims for success.=C2=
=A0 Existing technology has indeed produced a considerable collection of pa=
rts.=C2=A0 The focus here, however, is not on parts themselves, or on disco=
vering the holy grail of a fundamental and universal set of parts.=C2=A0 Ra=
ther, the key focus is on the mechanisms for connecting parts.</p><h3>Abstr=
act Syntax</h3><p class=3D"MsoNormal" style=3D"line-height: normal;">An abs=
tract syntax represents the semantics of a syntax construct and the compone=
nts or terms used to denote those semantics. =C2=A0=C2=A0As with other abst=
ractions there is often generality here that can lead to increased function=
ality.</p><p class=3D"MsoNormal" style=3D"line-height: normal;">A concrete =
syntax represents a particular representation of the components, usually as=
some set of keywords, brackets and special symbols.=C2=A0 Alternatively, i=
t can use diagrams and tables and other presentation forms. =C2=A0Capabilit=
ies also represent a way of representing the semantics of a construct indep=
endently of any particular syntax.=C2=A0 In addition they extend this with =
support for alternative syntax components and for alternative data.</p><p c=
lass=3D"MsoNormal" style=3D"line-height: normal;">An abstract syntax suppor=
ts interoperability among different syntactical representations.=C2=A0 Capa=
bilities support interoperability for different syntax, syntax components a=
nd data sources.</p><h3><span style=3D"font-family: "Times New Roman&q=
uot;, serif;">Name Use Differentiation</span></h3><p class=3D"MsoNormal" st=
yle=3D"line-height: normal;"><span style=3D"font-family: "Times New Ro=
man", serif;">Clarity in the use of names for identification of differ=
ent categories of identifiers is critical in any syntax.=C2=A0=C2=A0 This i=
s particularly important for generic code.=C2=A0 For instance, elaborate sy=
ntax can be used with brackets and key words to distinguish type and object=
names and their scopes.=C2=A0=C2=A0 For clarity in code reading, naming co=
nventions, such as leading caps or trailing =E2=80=9Ctype=E2=80=9D or plura=
l =E2=80=9Cs=E2=80=9D suffixes are often used to distinguish type names fro=
m object names.=C2=A0 Far simpler, and consistent, would be a distinguishin=
g naming convention.=C2=A0 This would provide language consistency and clar=
ity.=C2=A0=C2=A0 More significantly, it could, in fact, greatly simplify th=
e syntax.=C2=A0 =C2=A0=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line=
-height: normal;"><span style=3D"font-family: "Times New Roman", =
serif;">An extreme approach to this can be found in what is known as Hungar=
ian Notation, a rather elaborate approach to conveying type information. =
=C2=A0</span><span style=3D"font-family: "Times New Roman", serif=
;">More appropriate however, is to focus on the differing uses of names for=
the primary abstractions of object, type and abstract type.=C2=A0 =C2=A0Fo=
r instance, reference to types, classes, structs, and unions might be ident=
ified with a prefix of =E2=80=9C#=E2=80=9D. =C2=A0Abstract Types represent =
a higher level of abstraction and could be declared with a prefix such as =
=E2=80=9C##=E2=80=9D or =E2=80=9C!=E2=80=9D. =C2=A0</span><span style=3D"fo=
nt-family: "Times New Roman", serif;">The prefix can be used when=
the identifier is introduced to simplify syntax.=C2=A0 It is probably not =
as important for subsequent use of the identifier, but its consistent use c=
an enhance clarity in many contexts.</span></p><p class=3D"MsoNormal" style=
=3D"line-height: normal;"><span style=3D"font-family: "Times New Roman=
", serif;">Example: template<typename T> concept bool C =3D true=
;</span><span style=3D"font-size: 9pt; font-family: LMMono9-Regular; color:=
rgb(0, 154, 154);"></span></p><p class=3D"MsoNormal" style=3D"line-height:=
normal;"><span style=3D"font-family: "Times New Roman", serif;">=
becomes: =C2=A0##C</span></p><p class=3D"MsoNormal" style=3D"line-height: n=
ormal;"><span style=3D"font-family: "Times New Roman", serif;">Al=
so, since they are fundamentally very different things, it is useful to dis=
tinguish assignment of type expressions (=E2=86=90) from object expressions=
(=3D), as well abstract type and namespace components (::) from object com=
ponents (.).</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;=
"><span style=3D"font-family: "Times New Roman", serif;">With thi=
s, most uses of =E2=80=9Ctypedef=E2=80=9D, =E2=80=9Ctypename=E2=80=9D, =E2=
=80=9Cusing=E2=80=9D, =E2=80=9Crebind=E2=80=9D, and even =E2=80=9Ctemplate=
=E2=80=9D and angle brackets can be eliminated. =C2=A0Consider the followin=
g, which just sputters with =E2=80=9Ctype=E2=80=9D syllables:</span></p><p =
class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-fami=
ly: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 typ=
edef typename BaseType::value_type value_type</span></p><p class=3D"MsoNorm=
al" style=3D"line-height: normal; text-indent: 0in;"><span style=3D"font-fa=
mily: "Times New Roman", serif;">An alternative might be a type e=
xpression such as:</span></p><p class=3D"MsoNormal" style=3D"line-height: n=
ormal;"><span style=3D"font-family: "Times New Roman", serif;">=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 #value =E2=86=90 ##Base::#value;</span></p><=
h3><span lang=3D"X-NONE" style=3D"font-family: "Times New Roman",=
serif;">Auto</span><span style=3D"font-family: "Times New Roman"=
, serif;"></span></h3><p class=3D"MsoNormal" style=3D"line-height: normal;"=
><span style=3D"font-family: "Times New Roman", serif;">Auto is a=
useful placeholder for a type that can be deduced.=C2=A0 This, however, lo=
ses information since the actual resulting type name is hidden.=C2=A0 An al=
ternative is =E2=80=9C#type=E2=80=9D to capture the name of the type.=C2=A0=
</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span styl=
e=3D"font-family: "Times New Roman", serif;">For example:</span><=
/p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"fon=
t-family: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0 #length l=
ength =3D vector.size( ) ; =C2=A0</span></p><p class=3D"MsoNormal" style=3D=
"line-height: normal;"><span style=3D"font-family: "Times New Roman&qu=
ot;, serif;">For consistency, the basic auto keyword placeholder could be r=
eplaced with a simple =E2=80=9C#=E2=80=9D, and thus eliminate confusion wit=
h allocation concepts.</span></p><h3><span lang=3D"X-NONE" style=3D"font-fa=
mily: "Times New Roman", serif;">Example</span><span style=3D"fon=
t-family: "Times New Roman", serif;">s</span></h3><p class=3D"Mso=
Normal" style=3D"line-height: normal;"><span style=3D"font-family: "Ti=
mes New Roman", serif;">An basic example can be taken from STL proposa=
ls:</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span s=
tyle=3D"font-family: "Times New Roman", serif;">=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 template<typename T>=C2=A0<br>=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 concept bool Readable() {<br>=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0return requires (T i) {=C2=A0<br>=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 typename Value_type;=
{<br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {*i} =
-> const Value_type&;<br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 };=C2=A0<br>=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 };</span=
></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"f=
ont-family: "Times New Roman", serif;">This defines a property of=
iterators.=C2=A0 The more general concept is Readable, which captures the =
general Capability to extract a value from an expression, and which is sugg=
ested below.=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: n=
ormal;"><span style=3D"font-family: "Times New Roman", serif;">Th=
e example assumes that the base language defines operations for the use of =
readable and writeable values (such as assignable).=C2=A0 Capability declar=
ations below provide a means for accessing values through use of diverse sy=
ntax constructs.=C2=A0 For instance, a template might access a data value i=
n a container or where the value itself is generate by a particular supplie=
r through a function.=C2=A0 The using code doesn=E2=80=99t care=C2=A0 =C2=
=A0=C2=A0=C2=A0=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height=
: normal;"><span style=3D"font-family: "Times New Roman", serif;"=
>Examples -=C2=A0 =C2=A0requirements in square brackets use &&, ||,=
=C2=A0? and ~ =C2=A0for =E2=80=9Cand=E2=80=9D, =E2=80=9Cor=E2=80=9D. =E2=
=80=9Coptional=E2=80=9D and =E2=80=9Cnot=E2=80=9D expressions.</span></p><p=
class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-fam=
ily: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0 Assignab=
le=C2=A0 {##Writeable w && ##Readable r; w=3Dr , } ;</span></p><p c=
lass=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-famil=
y: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0 Readable {=
</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span styl=
e=3D"font-family: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //=C2=A0 Value</span></p><p cla=
ss=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family:=
"Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (##Value v) { [v ?const ?& ) || (v() ?co=
nst ?&) ||( v.get() ?const ?&)=C2=A0 };</span></p><p class=3D"MsoNo=
rmal" style=3D"line-height: normal;"><span style=3D"font-family: "Time=
s New Roman", serif;">=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0//=C2=A0 Access</span></p><p class=3D"MsoNormal" style=
=3D"line-height: normal;"><span style=3D"font-family: "Times New Roman=
", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 (##Value v, #Readable r) { r =E2=86=92 v };</span></p><p cl=
ass=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family=
: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0// =C2=A0Pointer<br>=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 =C2=A0 (##Pointer p , ##Pointer::#Readable r ) {* ?const p =
=E2=86=92 r};</span></p><p class=3D"MsoNormal" style=3D"line-height: normal=
;"><span style=3D"font-family: "Times New Roman", serif;">=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0//=
=C2=A0Function</span></p><p class=3D"MsoNormal" style=3D"line-height: norm=
al;"><span style=3D"font-family: "Times New Roman", serif;">=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0(##F=
unction f , ##Argument a,=C2=A0 # Readable r ) {f(a) =E2=86=92 r} ;</span><=
/p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"fon=
t-family: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // =C2=A0Member</span></p><p=
class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-fam=
ily: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =
=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0(const ##Base b, #Member m, cons=
t # Readable r)<br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 =C2=A0=C2=A0{[ b.m =E2=86=92 r) ] || [ (b.m( ) =E2=86=92 r ] || [=
(b.m.get( ) =C2=A0=E2=86=92 r ] )};</span></p><p class=3D"MsoNormal" style=
=3D"line-height: normal;"><span style=3D"font-family: "Times New Roman=
", serif;">=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0// =C2=A0Component</span></p><p class=3D"MsoNormal" st=
yle=3D"line-height: normal;"><span style=3D"font-family: "Times New Ro=
man", serif;">=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0( ##C =E2=86=90 (##Map||##Vector||##array) c, ##Ind=
ex i, # Readable r) {c[i] =E2=86=92r} ;</span></p><p class=3D"MsoNormal" st=
yle=3D"line-height: normal;"><span style=3D"font-family: "Times New Ro=
man", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0</span><b><span style=3D"font-size: 14pt; font-family: &q=
uot;Times New Roman", serif;">. . .</span></b><span style=3D"font-fami=
ly: "Times New Roman", serif;"></span></p><p class=3D"MsoNormal" =
style=3D"line-height: normal;"><span style=3D"font-family: "Times New =
Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // A common=
Get function, similar to =E2=80=9Cinvoke=E2=80=9D for =E2=80=9Ccallable=E2=
=80=9D could be used.</span></p><p class=3D"MsoNormal" style=3D"line-height=
: normal;"><span style=3D"font-family: "Times New Roman", serif;"=
>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0Get (##Pointer p,=C2=A0 # Readable r)</span></p><p class=3D"MsoNormal=
" style=3D"line-height: normal;"><span style=3D"font-family: "Times Ne=
w Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {*p =E2=86=
=92 r) ;</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><s=
pan style=3D"font-family: "Times New Roman", serif;">=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Get (##F=
unction f , ##Parameter a, # Readable r)</span></p><p class=3D"MsoNormal" s=
tyle=3D"line-height: normal;"><span style=3D"font-family: "Times New R=
oman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {f(a) =E2=86=
=92 r};</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><sp=
an style=3D"font-family: "Times New Roman", serif;">=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Get (##B=
ase b, Member m,=C2=A0 # Readable r</span></p><p class=3D"MsoNormal" style=
=3D"line-height: normal;"><span style=3D"font-family: "Times New Roman=
", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {( b.m =E2=86=92 v ?&am=
p;) || (b.m( ) =E2=86=92 v ?&) || (b.m.get( ) =E2=86=92 r};</span></p><=
p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-fa=
mily: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Get ( ##C =E2=86=90 (##Map=
||##Vector||##array) c , ##Index I, ##C::# Readable r)</span></p><p class=
=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family: &=
quot;Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { c[i=
] =E2=86=92r };=C2=A0=C2=A0=C2=A0=C2=A0</span></p><p class=3D"MsoNormal" st=
yle=3D"line-height: normal;"><span style=3D"font-family: "Times New Ro=
man", serif;">=C2=A0=C2=A0=C2=A0 =C2=A0};=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0</span></p><=
p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-fa=
mily: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0<b=
>. . .</b><br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =
##Writeable { Readable ~const, . . . } ;</span></p><p class=3D"MsoNormal" s=
tyle=3D"line-height: normal;"><span style=3D"font-family: "Times New R=
oman", serif;">=C2=A0 =C2=A0=C2=A0=C2=A0##Modifiable { ##Readable &=
;& ##Writeable =C2=A0};</span></p><p class=3D"MsoNormal" style=3D"line-=
height: normal;"><span style=3D"font-family: "Times New Roman", s=
erif;">Then we can have:</span></p><p class=3D"MsoNormal" style=3D"line-hei=
ght: normal;"><span style=3D"font-family: "Times New Roman", seri=
f;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 x =C2=A0int =E2=86=90##Writeable::Set (m=
ap, index) ; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* specified by user or supplier</span></p><p=
class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-fam=
ily: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 y =
int =E2=86=90 ##Readable:: Get (function, argument) ; =C2=A0/* specified by=
supplier or user</span></p><p class=3D"MsoNormal" style=3D"line-height: no=
rmal;"><span style=3D"font-family: "Times New Roman", serif;">=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0 x =3D y ;=C2=A0 //invokes Get and Set</span></p=
><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-=
family: "Times New Roman", serif;">The above is a fairly trivial =
example, but it illustrates the principle of separation of mechanisms for a=
ccess to data constructs from the functional operations on the data values.=
=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><spa=
n style=3D"font-family: "Times New Roman", serif;">Container acce=
ss provides some interesting possibilities for syntax commonality for gener=
alizations such as =E2=80=9Cinsert=E2=80=9D.</span></p><p class=3D"MsoNorma=
l" style=3D"line-height: normal;"><span style=3D"font-family: "Times N=
ew Roman", serif;">=C2=A0 =C2=A0Insert (##V=E2=86=90##Vector v, ##V::#=
Element e) =E2=86=92##V v</span></p><p class=3D"MsoNormal" style=3D"line-he=
ight: normal;"><span style=3D"font-family: "Times New Roman", ser=
if;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {v.emplace_back (e) =E2=86=
=92v};</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><spa=
n style=3D"font-family: "Times New Roman", serif;">=C2=A0 =C2=A0I=
nsert (##V=E2=86=90##Vector v, ##V::#Positon p, ##V::#Element e) =E2=86=92 =
##V v</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span=
style=3D"font-family: "Times New Roman", serif;">=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0 { v.emplace(v, p, e) =E2=86=92 v};=C2=A0=C2=A0<=
/span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=
=3D"font-family: "Times New Roman", serif;">=C2=A0 =C2=A0Insert (=
##L=E2=86=90##List l, ##L::#Position p, ##L::#Element e)=E2=86=92 ##L l =C2=
=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span s=
tyle=3D"font-family: "Times New Roman", serif;">=C2=A0=C2=A0=C2=
=A0 =C2=A0=C2=A0=C2=A0=C2=A0{ l.insert(p, e) }=E2=86=92 l };</span></p><p c=
lass=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-famil=
y: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0Insert(##M=E2=86=
=90##Map m, ##M::#Key k, ##M::##Element e) =E2=86=92##M m<br>=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0{ m.empl=
ace(k, e) =E2=86=92 m };=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0</span></p><p class=
=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family: &=
quot;Times New Roman", serif;">=C2=A0=C2=A0 Insert(##M=E2=86=90##Map m=
, ##M::#Pair p) =E2=86=92##M m<br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0{ m.emplace(p.first, p.second) =E2=
=86=92 m };=C2=A0=C2=A0=C2=A0=C2=A0</span></p><p class=3D"MsoNormal" style=
=3D"line-height: normal;"><span style=3D"font-family: "Times New Roman=
", serif;">=C2=A0=C2=A0 Insert(##M=E2=86=90##Map m, ##M::#Element e) =
=E2=86=92##M m<br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 =C2=A0=C2=A0{ m.emplace(e.key( ), e) =E2=86=92 m };=C2=A0=C2=A0=
=C2=A0=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;=
"><span style=3D"font-family: "Times New Roman", serif;">Or, more=
generally:</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"=
><span style=3D"font-family: "Times New Roman", serif;">=C2=A0=C2=
=A0=C2=A0Insert (##C=E2=86=90##Container c, ##C::#Element e) =E2=86=92##C c=
</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span styl=
e=3D"font-family: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0{ (Insert (c, e) =E2=86=92 c} ;</span></p><p class=
=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family: &=
quot;Times New Roman", serif;">=C2=A0=C2=A0 Insert (##C=E2=86=90##Cont=
ainer c, ##C::#Position p, ##C::#Element e ) =E2=86=92##C c</span></p><p cl=
ass=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family=
: "Times New Roman", serif;">=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0{ (Insert(c, p, e) =E2=86=92c };</span></p><p class=3D"MsoNormal" =
style=3D"line-height: normal;"><span style=3D"font-family: "Times New =
Roman", serif;">And, still better yet, overload =E2=80=9C<<=E2=
=80=9D for container and stream insert and =E2=80=9C.=E2=80=9D for element =
access and use:</span></p><p class=3D"MsoNormal" style=3D"line-height: norm=
al;"><span style=3D"font-family: "Times New Roman", serif;">=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 c << e=C2=A0 ;</span></p><p class=
=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family: &=
quot;Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 c =
<<(p) e ;=C2=A0=C2=A0 /* or */ ; c.p << e ;</span></p><p class=
=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family: &=
quot;Times New Roman", serif;">Another useful extension could be based=
on =E2=80=9Cinvoke=E2=80=9D, to supply a continuation function call.=C2=A0=
This supports a useful pattern for pipes.=C2=A0 Also, this could be combin=
ed with tests to handle special conditions, errors and exceptions.</span></=
p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font=
-family: "Times New Roman", serif;">Somewhat different are requir=
ements for expressions over type constructs.=C2=A0 For example:</span></p><=
p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-fa=
mily: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 t=
emplate<typename T>=C2=A0<br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0 concept bool Input_range() {<br>=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0 =C2=A0return requires(T range) {=C2=A0<br>=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 typename Iterator_type;<br>=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 requires In=
put_iterator;=C2=A0<br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 };<br>=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0};</span></p><p c=
lass=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-famil=
y: "Times New Roman", serif;">This can become:</span></p><p class=
=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family: &=
quot;Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ##Input_=
range =C2=A0=E2=86=90 ##Range::#Iterator::category =3D=3D Input ;</span></p=
><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-=
family: "Times New Roman", serif;">An objective for these syntax =
constructs is that, with little practice, the syntax can be read, and gener=
ally written, directly from their intended semantics.=C2=A0</span></p><h3><=
span lang=3D"X-NONE">Principles</span></h3><p class=3D"MsoNormal" style=3D"=
line-height: normal;"><span style=3D"font-family: "Times New Roman&quo=
t;, serif;">These examples illustrate fundamental principles of context acc=
ess, of process abstraction, and of generality.=C2=A0</span></p><p class=3D=
"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family: Symb=
ol;">=C2=B7<span style=3D"font-stretch: normal; font-size: 7pt; line-height=
: normal; font-family: "Times New Roman";">=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0</span></span><span style=3D"font-family: "Times =
New Roman", serif;">The approach effectively provides a general mechan=
ism for computations over values, that is separated from the context in whi=
ch the values reside, and from where they must be extracted and inserted.=
=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal; text-=
indent: 0in;"><span style=3D"font-family: "Times New Roman", seri=
f;">This essentially provides a base for exploiting many of the constructs =
and facilities of functional programming.</span></p><p class=3D"MsoNormal" =
style=3D"line-height: normal;"><span style=3D"font-family: Symbol;">=C2=B7<=
span style=3D"font-stretch: normal; font-size: 7pt; line-height: normal; fo=
nt-family: "Times New Roman";">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0</span></span><span style=3D"font-family: "Times New Roman&qu=
ot;, serif;">It provides a mechanism for system and user libraries to encap=
sulate and thereby exploit the extensive syntax mechanisms that are evolvin=
g for C++, in a manner that lends to increased readability and understandin=
g of the using code functionality.=C2=A0</span></p><p class=3D"MsoNormal" s=
tyle=3D"line-height: normal;"><span style=3D"font-family: Symbol;">=C2=B7<s=
pan style=3D"font-stretch: normal; font-size: 7pt; line-height: normal; fon=
t-family: "Times New Roman";">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0</span></span><span style=3D"font-family: "Times New Roman&qu=
ot;, serif;">More generally, it can support a range of abstractions for tye=
ps, data and processing, which can then be separately mapped to concrete im=
plementations.=C2=A0</span></p><h3><span lang=3D"X-NONE" style=3D"font-fami=
ly: "Times New Roman", serif;">Function Parameter</span><span sty=
le=3D"font-family: "Times New Roman", serif;">s</span><span lang=
=3D"X-NONE" style=3D"font-family: "Times New Roman", serif;"></sp=
an></h3><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=
=3D"font-family: "Times New Roman", serif;">Much of the complexit=
y of parameter type specification is tied up with the complexities of mappi=
ng function call arguments to declaration parameters.</span></p><p class=3D=
"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family: &quo=
t;Times New Roman", serif;">Function declarations specify how the func=
tion can use supplied parameters with various categories of modes for read,=
reference, modify, copy and move.=C2=A0 C++ specifications use const and r=
eference decorators to indirectly indicate what is intended.=C2=A0 This sta=
rted out to be reasonably straightforward, until references to references a=
nd special support for =E2=80=9Crvalues=E2=80=9D were needed.</span></p><p =
class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-fami=
ly: "Times New Roman", serif;">Much, if not all needed simplifica=
tion and clarity can occur with syntax for the declaration of a parameter t=
hat directly indicates its purpose and its use.=C2=A0 In many cases this ca=
n start with simply distinguishing inputs from outputs in the function decl=
aration.=C2=A0 This is done in some languages with specific =E2=80=9Cin=E2=
=80=9D and =E2=80=9Cout=E2=80=9D mode specifications for the parameter.=C2=
=A0 Since =E2=80=9Cin=E2=80=9D is the most common it can be elided.=C2=A0 A=
lso, whether or not a copy is made internally by, or for the function is of=
no concern to the caller or to the declaration.=C2=A0=C2=A0=C2=A0 With thi=
s =E2=80=9Cout=E2=80=9D parameters indicate values that the function can mo=
dify.=C2=A0 Return parameters are values the function can return, including=
tuples.=C2=A0 These categories can be specified separately.=C2=A0 For inst=
ance:=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"=
><span style=3D"font-family: "Times New Roman", serif;">=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0 functionName (inParms . . .=C2=A0 )(outParms . . . ) =
=E2=86=92 result;</span></p><p class=3D"MsoNormal" style=3D"line-height: no=
rmal;"><span style=3D"font-family: "Times New Roman", serif;">Fun=
ction invocation could require the extra brackets for the sake of clarity.=
=C2=A0 The compiler can decide, at least for most cases, among copy, move (=
if available), reference, const, pointer extraction, copy elision, etc.=C2=
=A0=C2=A0 Also, if there is some particular need in the declaration, a prog=
rammer can specify conversions, to be used or preferred.=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;=
"><span style=3D"font-family: "Times New Roman", serif;">=E2=80=
=9CMove semantics=E2=80=9D introduces a completely different mode of parame=
ter use; i.e., values that can be invalidated.=C2=A0 These are used for cop=
ying of temporaries and are chosen implicitly through function overload.=C2=
=A0 These can be clearly indicated with an additional mode category.</span>=
</p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"fo=
nt-family: "Times New Roman", serif;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0 functionName (inParms . . .=C2=A0 )(outParms . . . )(moveParms . . . )=
=E2=86=92 result;</span></p><p class=3D"MsoNormal" style=3D"line-height: no=
rmal;"><span style=3D"font-family: "Times New Roman", serif;">The=
re is also a category of generic parameters that can be passed to a functio=
n and can be of any of the above categories.=C2=A0 These are then forward t=
o a specific function invocation for which all the rules of function overlo=
ad selection and validation are applied when the function is instantiated.=
=C2=A0=C2=A0 Such usage can be indicated, for instance, with double parens;=
i.e. ((genericParms)).=C2=A0</span></p><h3><span lang=3D"X-NONE" style=3D"=
font-family: "Times New Roman", serif;">Captured Names</span></h3=
><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-=
family: "Times New Roman", serif;">Although it is often looked up=
on as dangerous, u</span><span style=3D"font-family: "Times New Roman&=
quot;, serif;">se or =E2=80=9Ccapture=E2=80=9D of names outside of a functi=
on declaration or definition is common, but often lacks clarity. =C2=A0</sp=
an></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D=
"font-family: "Times New Roman", serif;">For lambdas, this use is=
explicitly indicated with special bracket syntax.=C2=A0 This can be extend=
ed for any function declaration.</span></p><p class=3D"MsoNormal" style=3D"=
line-height: normal;"><span style=3D"font-family: "Times New Roman&quo=
t;, serif;">For example:</span></p><p class=3D"MsoNormal" style=3D"line-hei=
ght: normal;"><span style=3D"font-family: "Times New Roman", seri=
f;">=C2=A0=C2=A0=C2=A0 functionName (inputs . . . )(outputs . . . ) =E2=86=
=92 result [=3Dname1, &name2, . . . ] {. . .};</span><span style=3D"fon=
t-family: "Times New Roman", serif;"></span></p><p class=3D"MsoNo=
rmal" style=3D"line-height: normal; text-indent: 0in;"><span style=3D"font-=
family: "Times New Roman", serif;">or better,</span></p><p class=
=3D"MsoNormal" style=3D"line-height: normal;"><span style=3D"font-family: &=
quot;Times New Roman", serif;">=C2=A0=C2=A0=C2=A0 functionName(inputs.=
. .)(outputs. . .) =E2=86=92 result [name1 . . .][name2 . . .] {. . .};</s=
pan></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span style=
=3D"font-family: "Times New Roman", serif;">Also, while capture o=
ccurs in the scope of the function declaration, it is can also be useful to=
provide capture in the context of the function definition and, possibly ev=
en with generics, in the instantiation context. This could be indicated wit=
h repetition of prefix characters for the unusual latter cases, e.g. =E2=80=
=9C=3D=3D=E2=80=9D and =E2=80=9C=3D=3D=3D=E2=80=9D.=C2=A0 Since, such uses =
are unusual and require special notice, simpler might be to use double and =
triple brackets in the declaration.</span></p><p class=3D"MsoNormal" style=
=3D"line-height: normal;"><span style=3D"font-family: "Times New Roman=
", serif;">As part of this, the square brackets can also introduce tem=
plate requirements:</span></p><p class=3D"MsoNormal" style=3D"line-height: =
normal;"><span style=3D"font-family: "Times New Roman", serif;">=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fun(##A a, ##B b) (##C c)=E2=86=92 result [x=
, (c=3D a*x+b ) ] { . . . } ;</span></p><h3><span style=3D"font-family: &qu=
ot;Times New Roman", serif;">Name Scope Use</span></h3><p class=3D"Mso=
Normal" style=3D"line-height: normal;"><span style=3D"font-family: "Ti=
mes New Roman", serif;">Clarity in the scope of names used in code is =
critical to understanding the intent of the programs in which they occur.=
=C2=A0 This is relevant=C2=A0</span><span style=3D"font-family: "Times=
New Roman", serif;">at different levels of brackets, functions, param=
eters, name scope, derived class definitions and local declarations, etc.=
=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><spa=
n style=3D"font-family: "Times New Roman", serif;">Lack of clarit=
y of the scope of a name can lead to interesting=C2=A0</span><span style=3D=
"font-family: "Times New Roman", serif;">maga</span><span style=
=3D"font-family: "Times New Roman", serif;">zine columns.=C2=A0 M=
ore critically this it can lead to subtle bugs especially when code is late=
r modified and extended.</span></p><p class=3D"MsoNormal" style=3D"line-hei=
ght: normal;"><span style=3D"font-family: "Times New Roman", seri=
f;">Prefix characters are useful here also to highlight the use of names th=
at are not part of the local specification.=C2=A0 Function parameters in so=
me languages are addressed with a leading character such as =E2=80=9C$=E2=
=80=9D.=C2=A0 Captured names require more clarity and perhaps a prefix such=
as =E2=80=9C@=E2=80=9D.=C2=A0 Local variable names in a class often have a=
=E2=80=9C_=E2=80=9D prefix, in both the declaration and use.=C2=A0 Such sp=
ecifications are critical to understanding code and could be inserted by th=
e compiler (or tool) automatically, if not supplied. =C2=A0Short alias pref=
ixes derived from namespaces are useful to identify the source and hence me=
aning of names.=C2=A0=C2=A0</span></p><p class=3D"MsoNormal" style=3D"line-=
height: normal;"><span style=3D"font-family: "Times New Roman", s=
erif;">Some consolidation and systemization of such conventions can be eith=
er explicitly specified by syntax, or implicitly by rules declared to the c=
ompiler by pragmas.</span></p><h3><span style=3D"font-family: "Times N=
ew Roman", serif;">Factored Attributes</span></h3><p class=3D"MsoNorma=
l" style=3D"line-height: normal;"><span style=3D"font-family: "Times N=
ew Roman", serif;">Keywords for public, protected, private, namespace =
and using directives, all introduce bracketed sections of declarations with=
common attributes.</span></p><p class=3D"MsoNormal" style=3D"line-height: =
normal;"><span style=3D"font-family: "Times New Roman", serif;">T=
his could be systematically extended to provide structuring for any attribu=
te.=C2=A0 It would be especially useful for long lists of declarations.=C2=
=A0</span></p><p class=3D"MsoNormal" style=3D"line-height: normal;"><span s=
tyle=3D"font-family: "Times New Roman", serif;">Also, it could cl=
arify the use of =E2=80=9Cstatic=E2=80=9D, which connotes little of what it=
actually means. =C2=A0Inside a class or function scope, a keyword such as =
=E2=80=9Cfixed=E2=80=9D might be clearer.=C2=A0 Outside a class or function=
context, names can be declared =E2=80=9Cfile scope=E2=80=9D, or, perhaps b=
etter, =E2=80=9Clocal=E2=80=9D.</span></p><p class=3D"MsoNormal" style=3D"l=
ine-height: normal;"><span style=3D"font-family: "Times New Roman"=
;, serif;">A related category might be =E2=80=9Cthread local=E2=80=9D.</spa=
n></p><h3><span style=3D"font-family: "Times New Roman", serif;">=
Leading Names in Declarations=C2=A0</span><span lang=3D"X-NONE" style=3D"fo=
nt-family: "Times New Roman", serif;"></span></h3><p class=3D"Mso=
Normal" style=3D"line-height: normal;"><span style=3D"font-family: "Ti=
mes New Roman", serif;">Much of the previous aims to introduce names a=
t the left of a line of code to make it easy to scan the code looking for a=
declaration.</span></p><p class=3D"MsoNormal" style=3D"line-height: normal=
;"><span style=3D"font-family: "Times New Roman", serif;">Declara=
tions can be obtuse when they bury a name declaration in the middle of a co=
mplex syntax structure.=C2=A0 Function type names are a simple and obvious =
example.=C2=A0</span></p></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/4ef0b9bf-3c9e-47c6-bb93-ee139b741103%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/4ef0b9bf-3c9e-47c6-bb93-ee139b741103=
%40isocpp.org</a>.<br />
------=_Part_119_2129148651.1480549896006--
------=_Part_118_538700335.1480549896005
Content-Type: application/msword; name="Syntax simplification 161002.doc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Syntax simplification 161002.doc"
X-Attachment-Id: ecedb1e6-866e-4d70-b38b-be89c4f87554
Content-ID: <ecedb1e6-866e-4d70-b38b-be89c4f87554>
0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAADAAAADAEAAAAAAAAA
EAAADwEAAAEAAAD+////AAAAAAkBAAAKAQAACwEAAP//////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////s
pcEAEwAJBAAA8BK/AAAAAAAAEAAAAAAACAAAFfYAAA4AYmpiaijkKOQAAAAAAAAAAAAAAAAAAAAA
AAAJBBYAOPwAAEqOwmNKjsJjcXYAAAAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAA
AAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAALcAAAAAAFwfAAAAAAAAXB8AAKMt
AAAAAAAAoy0AAAAAAACjLQAAAAAAAKMtAAAAAAAAoy0AABQAAAAAAAAAAAAAAP////8AAAAAty0A
AAAAAAC3LQAAAAAAALctAAA4AAAA7y0AAGQBAABTLwAATAAAALctAAAAAAAAJ90AAMQCAACfLwAA
AAAAAJ8vAAA6AAAA2S8AAAAAAADZLwAAAAAAANkvAAAAAAAADTEAAAAAAAANMQAAAAAAAA0xAAAA
AAAAetsAAAIAAAB82wAAAAAAAHzbAAAAAAAAfNsAAAAAAAB82wAAAAAAAHzbAAAAAAAAfNsAACQA
AADr3wAAtgIAAKHiAACkAAAAoNsAAEEBAAAAAAAAAAAAAAAAAAAAAAAAoy0AAAAAAAANMQAAAAAA
AAAAAAAAAAAAAAAAAAAAAAANMQAAAAAAAA0xAAAAAAAADTEAAAAAAAANMQAAAAAAAKDbAAAAAAAA
AAAAAAAAAACjLQAAAAAAAKMtAAAAAAAA2S8AAAAAAAAAAAAAAAAAANkvAAA0AQAA4dwAABYAAADn
OAAAAAAAAOc4AAAAAAAA5zgAAAAAAAANMQAAdgMAAKMtAAAAAAAA2S8AAAAAAACjLQAAAAAAANkv
AAAAAAAAetsAAAAAAAAAAAAAAAAAAOc4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAADTEAAAAAAAB62wAAAAAAAAAAAAAAAAAA5zgAAAAAAADnOAAA
MgIAAM5mAADwAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApmwAAAAAAADZLwAAAAAAAP////8AAAAAYC0ILx1A
0gEAAAAAAAAAAP////8AAAAAgzQAAIIDAAC+aQAAMAAAAAAAAAAAAAAAZtsAABQAAAD33AAAMAAA
ACfdAAAAAAAA7mkAALgCAABF4wAAAAAAAAU4AADiAAAAReMAAFwAAACmbAAAIgAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADI
bAAAxhsAAEXjAAAAAAAAAAAAAAAAAACjLQAAAAAAAI6IAADYUgAADTEAAAAAAAANMQAAAAAAAOc4
AAAAAAAADTEAAAAAAAANMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTEA
AAAAAAANMQAAAAAAAA0xAAAAAAAAoNsAAAAAAACg2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA5zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0xAAAA
AAAADTEAAAAAAAANMQAAAAAAACfdAAAAAAAADTEAAAAAAAANMQAAAAAAAA0xAAAAAAAADTEAAAAA
AAAAAAAAAAAAAP////8AAAAA/////wAAAAD/////AAAAAAAAAAAAAAAA/////wAAAAD/////AAAA
AP////8AAAAA/////wAAAAD/////AAAAAP////8AAAAA/////wAAAAD/////AAAAAP////8AAAAA
/////wAAAAD/////AAAAAP////8AAAAA/////wAAAAD/////AAAAAEXjAAAAAAAADTEAAAAAAAAN
MQAAAAAAAA0xAAAAAAAADTEAAAAAAAANMQAAAAAAAA0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANMQAAAAAAAA0xAAAAAAAADTEA
AAAAAABcHwAADQ0AAGksAAA6AQAABQASAQAACQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMrKyBT
eW50YXggUG9zc2liaWxpdGllcyANDUludHJvZHVjdGlvbg1UaGlzIG5vdGUgc3VnZ2VzdHMgc29t
ZSBnZW5lcmFsaXphdGlvbiBhbmQgc2ltcGxpZmljYXRpb24gb2YgQysrIGxhbmd1YWdlIHN5bnRh
eCwgbGFyZ2VseSBiYXNlZCBvbiBleHRlbnNpb25zIG9mIHdoYXQgaXMgY3VycmVudGx5IGluIJND
b25jZXB0cyBMaXRllC4gICBUaGVyZSBpcyBzb21lIGdlbmVyYWwgZGlzY3Vzc2lvbiBvZiByZWFz
b25zIGZvciB3aGF0IGV4aXN0cywgYW5kIG9mIGZ1dHVyZSBldm9sdXRpb24uICAgU2luY2UgaXQg
aXMgYSByYXRoZXIgbG9uZyBub3RlIGZvciBhIGZvcnVtIGVudHJ5LCBza2lwcGluZyB0byB0aGUg
RXhhbXBsZXMgc2VjdGlvbiBtaWdodCBwcm92aWRlIGEgcXVpY2sgb3ZlcnZpZXcgb2Ygc29tZSBv
ZiB0aGUgcmVzdWx0aW5nIHBvc3NpYmlsaXRpZXMuIA1PYmplY3RpdmVzDVByZXZpb3VzIG5vdGVz
IHBvc3RlZCBoZXJlIGhhdmUgbWFkZSBzdWdnZXN0aW9ucyBmb3Igc2ltcGxpZnlpbmcgYW5kIGV4
cGFuZGluZyBhcHByb2FjaGVzIHRvIEMrKyB0ZW1wbGF0ZXMgYW5kIENvbmNlcHRzLiAgVGhpcyBu
b3RlIGlzIGRlc2lnbmVkIHRvIGV4cGFuZCBvbiB0aGF0IGFuZCB0byBzdWdnZXN0IGEgc3RhcnQg
YXQgYSBzaWduaWZpY2FudCBzaW1wbGlmaWNhdGlvbiBvZiBjb2RlIGNvbnN0cnVjdHMgYW5kIHN5
bnRheC4gICANQXMgYWRkaXRpb25hbCBjYXBhYmlsaXRpZXMsIGhhdmUgYmVlbiBhZGRlZCB0byB0
aGUgbGFuZ3VhZ2UsIEMrKyBzeW50YXggY29uc3RydWN0cyBoYXZlIGJlY29tZSBpbmNyZWFzaW5n
bHkgZGlzdHJhY3RpbmcgcmVsYXRpdmUgdG8gYmFzaWMgY29kZSBmdW5jdGlvbmFsaXR5LiAgIFNv
bWUgZW1waGFzaXMgb24gc2ltcGxpZmljYXRpb24gaXMgYWxyZWFkeSBoYXBwZW5pbmcsIHN1Y2gg
YXMgbm90IGhhdmluZyB0byBzcGVjaWZ5IHRoZSBzYW1lIHR5cGUgcmVwZWF0ZWRseSBpbiB0ZW1w
bGF0ZSBwYXJhbWV0ZXJzLCBpbiByZXF1aXJlbWVudHMgY2xhdXNlcywgYW5kIGluIGZ1bmN0aW9u
IHBhcmFtZXRlcnMuICBIb3dldmVyLCB0aGUgY29tcGxleGl0aWVzIHNlZW0gdG8gYmUgZ3Jvd2lu
ZyBhdCBhIGdyZWF0ZXIgcmF0ZS4gICANVGhlIGF0dGVtcHQgaGVyZSBpcyB0byBkZWZpbmUgc3lu
dGF4IHRoYXQgcmVhZHMgbmF0dXJhbGx5IGluIGV4cHJlc3NpbmcgdGhlIHByb2dyYW1tZXKScyBh
YnN0cmFjdGlvbnMgYW5kIGludGVudCwgcmF0aGVyIHRoYW4gaXRzIGltcGxlbWVudGF0aW9uIGNo
YXJhY3RlcmlzdGljcy4gIEEgbWVhc3VyZSBvZiB0aGlzIGlzIGNvZGUgdGhhdCCTZG9lcyB3aGF0
IGl0IHNheXOUIGFuZCCTc2F5cyB3aGF0IGl0IGRvZXOULCB3aGljaCBpcyBoYXJkIGVub3VnaCB0
byBkbyBhbnl3YXksIHdpdGhvdXQgaGF2aW5nIHRvIGJlIGluY29ycG9yYXRlZCBpbiBzeW50YXgg
dG8gdGVsbCB0aGUgY29tcGlsZXIgd2hhdCBpdCBpcyB0cnlpbmcgdG8gZG8uICBUaGUgY29kZSBk
b2VzIG5lZWQgdG8gc3BlYWsgdG8gdGhlIGNvbXBpbGVyIGFzIHdlbGwgYXMgdGhlIGh1bWFuIHJl
YWRlciwgYnV0LCBpZiB3ZWxsIGNyYWZ0ZWQsIGRvaW5nIHRoZSBsYXR0ZXIgc2hvdWxkIHN1ZmZp
Y2UgZm9yIHRoZSBmb3JtZXIuICBVbHRpbWF0ZWx5LCB0aGUgZm9jdXMgbmVlZHMgdG8gYmUgb24g
dGhlIGFic3RyYWN0aW9ucyBuZWVkZWQgYnkgdGhlIHByb2dyYW1tZXIgdG8gY29udmV5IHRoZSBl
c3NlbmNlIG9mIGEgY29tcHV0YXRpb24gb3Igb2YgYSBkYXRhIHR5cGUuICBPZnRlbiwgdGhpcyBh
YnN0cmFjdGlvbiBjYW4gYWxzbyBsZWFkIHRvIGluY3JlYXNlZCBnZW5lcmFsaXR5LiAgIA1UaGlz
IG5vdGUgZGlzY3Vzc2VzIGFuIGluY29tcGxldGUgc2VyaWVzIG9mIHRvcGljcywgYW5kIHRoZXJl
IGFyZSBhdCBiZXN0IGluY29tcGxldGUgYXJndW1lbnRzIGZvciBhbnkgcGFydGljdWxhciB0b3Bp
Yy4gIFRoZSBob3BlLCBob3dldmVyLCBpcyB0aGF0IHRha2VuIHRvZ2V0aGVyLCB0aGlzIG1pZ2h0
IHN1Z2dlc3QgZnVuZGFtZW50YWwgYXBwcm9hY2hlcyB0aGF0IHNpZ25pZmljYW50bHkgaW5jcmVh
c2UgdGhlIGFic3RyYWN0aW9uIGxldmVsIG9mIHRoZSBsYW5ndWFnZS4gIA1QcmVjaXNpb24gYW5k
IExhY2sgb2YgQ2xhcml0eQ1BIExhdGluIHRlYWNoZXIgb25jZSBkZXNjcmliZWQgYSBnb29kIHRy
YW5zbGF0aW9uIGFzIGJlaW5nIGJvdGggYWNjdXJhdGUgYW5kIGlkaW9tYXRpYy4gIFRoZSBhbmFs
b2d5IHRvIHByb2dyYW1taW5nIGxhbmd1YWdlcyBpcyBhIG5lZWQgZm9yIGJvdGggcHJlY2lzaW9u
IGFuZCBjbGFyaXR5LiAgVWx0aW1hdGVseSBzeW50YXggbmVlZHMgdG8gYmUgcHJlY2lzZSwgYm90
aCBmb3IgdGhlIGNvbXBpbGVyIGFuZCB0aGUgbGFuZ3VhZ2UgZXhwZXJ0LiAgRXF1YWxseSBpbXBv
cnRhbnQgdGhvdWdoLCBpdCByZXF1aXJlcyBjbGFyaXR5IHRvIGNvbnZleSB0aGUgaW50ZW50IG9m
IHRoZSBwcm9ncmFtbWVyLCBhcyB3ZWxsIGFzIHRoZSBkZW1hbmRzIG9mIHN5bnRheC4gIA1Db25z
aWRlciBjb25zdCwgdm9sYXRpbGUsIHJlZmVyZW5jZSBhbmQgcmVmZXJlbmNlIHJlZmVyZW5jZS4g
IEl0IGlzIGVhc3kgdG8gYWRkIHF1YWxpZmllcnMgc3VjaCBhcyBjb25zdCBhbmQgcmVmZXJlbmNl
IHRvIGEgdHlwZSBzcGVjaWZpY2F0aW9uLiAgRm9yIHJlbW92aW5nIHRoZXNlIHF1YWxpZmllcnMs
IGEgdmFyaWV0eSBvZiBzeW50YXggY2lyY3VtbG9jdXRpb25zIGFyZSBpbnZlbnRlZCwgc29tZSBv
ZiB3aGljaCByZW1vdmUgdGhlIHF1YWxpZmljYXRpb24sIG90aGVycyBvZiB3aGljaCBkbyBub3Qu
ICBXaGlsZSB0aGVyZSBpcyB2YWx1ZSBpbiBzdXBwb3J0aW5nIGNhcGFiaWxpdGllcyB0aHJvdWdo
IGxpYnJhcnkgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBsYW5ndWFnZSBjaGFuZ2UsIHNpbXBsZSB1
c2Ugb2YgYSBuZWdhdGl2ZSBzeW1ib2wgY291bGQgbGVhZCB0byBjb2RlIHRoYXQgaXMgc2ltcGVy
IGFuZCBpbnR1aXRpdmVseSBleHByZXNzaXZlOyBmb3IgaW5zdGFuY2U6ICh0eXBlIH5jb25zdCB+
JikuICANT2Z0ZW4gZm9jdXMgb24gbGFuZ3VhZ2UgcHJvY2Vzc2luZyBwcmVjaXNpb24gbGVhZHMg
dG8gY29uZnVzaW5nIGFuZCBhcmNhbmUgY29uc3RydWN0cyB0aGF0IHN1ZmZlciBpbiBwcm9ncmFt
bWVyIGNsYXJpdHkgc3VjaCBhczoNCXJlcXVpcmVzIHJlcXVpcmVzIHt0eXBlbmFtZSCFdHlwZSB9
OyAuIC4gLg0JY29uY2VwdCBib29sIHtyZXR1cm4gcmVxdWlyZXMgLiAuIC4gIH07DUhlcmUgdGhl
IGVsbGlwc2VzIGluZGljYXRlIGFyZWFzIG9mIGNvZGUgd2hlcmUgdGhlIHByb2dyYW1tZXKScyBj
b25zdHJ1Y3QgaXMgYnVyaWVkIGluIGEgY2FzY2FkZSBvZiBzeW50YXggY29uc3RydWN0cy4gIFRo
aXMgbGFjayBvZiBzaW1wbGljaXR5IGFuZCBjbGFyaXR5IGluIHN5bnRheCBoYXMgdW5kb3VidGVk
bHkgcmFpc2VkIHNvbWUgc3VzcGljaW9ucyBhYm91dCB0aGUgdW5kZXJseWluZyBjb25zaXN0ZW5j
eSBmb3IgQ29uY2VwdHMsIGFuZCB0aGlzIGhlc2l0YW5jeSBtYXkgYWNjb3VudCBmb3IgbXVjaCBv
ZiB0aGUgcmVsdWN0YW5jZSB0byBhcHByb3ZlIENvbmNlcHRzIGZvciBDKysuIA1Nb3JlIGRpZmZp
Y3VsdCBhcmUgbGlicmFyeSBmYWNpbGl0aWVzIGZvciBpbnRlcmFjdGluZyB3aXRoIGNvbXBpbGVy
IGNvbnN0cnVjdHMgZm9yIG11bHRpcGxlIHR5cGVzIG9mIHJlZmVyZW5jZXMgKHJ2YWx1ZSwgZ2x2
YWx1ZSwgcHJ2YWx1ZSwgLiAuIC4pIGFuZCCTcmVmZXJlbmNlIGNvbGxhcHNpbmeUIHJ1bGVzIHRo
cm91Z2ggYW4gYW1hemluZyBzZXQgb2Ygk3N0ZDo6eHh4lCAgY29uc3RydWN0cy4gICBJdCBpcyBh
biBpbnRlcmVzdGluZyBxdWVzdGlvbiwgaWYgdGhlcmUgYXJlIG1hbnkgZXhwZXJ0cyB3aG8gY291
bGQgbG9vayBhdCBhIHNldCBvZiCTZGVjbHR5cGWUIGRlY2xhcmF0aW9ucyBhbmQgY29ycmVjdGx5
IHBhcnNlIHRoZWlyIG1lYW5pbmcuICAgTW9yZSBkaXJlY3QgYXBwcm9hY2hlcyB0byBjYXB0dXJp
bmcgcHJvZ3JhbW1lciBpbnRlbnQgaGVyZSBpcyBkaXNjdXNzZWQgdW5kZXIgdGhlIHRvcGljIG9m
IGZ1bmN0aW9uIHBhcmFtZXRlcnMuIA1Db21wYXRpYmlsaXR5DU9mIGNvdXJzZSwgY29tcGF0aWJp
bGl0eSBpcyBhIGRvbWluYW50IGlzc3VlLiAgT3RoZXIgYXBwcm9hY2hlcywgc3VjaCBhcyBKYXZh
LCBEIGFuZCBDIywgYXJlIHNwaW4gb2ZmcyB0aGF0IGhhdmUgc291Z2h0IHNpbXBsaWZpY2F0aW9u
IGluIGNyaXRpY2FsIGFyZWFzLCBidXQgaGF2ZSBsb3N0IG11Y2ggb2YgdGhlIGJhc2ljIHVuZGVy
bHlpbmcgcG93ZXIgb2YgQysrLiAgQW4gYWx0ZXJuYXRpdmUgaXMgbmV3IHN5bnRheCwgdGhhdCBs
ZWF2ZXMgdGhlIGJhc2UgY2FwYWJpbGl0aWVzIGluIHBsYWNlLCBhbmQgZXZlbiBzdWdnZXN0cyBl
bmhhbmNlbWVudHMuICAgDUhvd2V2ZXIsIGZvcmNpbmcgbmV3IGZlYXR1cmVzIGludG8gb2xkIHN5
bnRheCBjYW4gbGVhZCB0byBhd2t3YXJkIGNvbnN0cnVjdHMgdGhhdCBvZnRlbiBkaXNndWlzZSB0
aGUgcHJvZ3JhbW1lcpJzIGludGVudC4gIENvbnN0cnVjdHMgZm9yIHJlZmVyZW5jZXMgdG8gcmVm
ZXJlbmNlcyB3aXRoIGludGVybmFsIGNvbGxhcHNpbmcgcnVsZXMsIHRvIHBlcm1pdCBtb3ZlIHNl
bWFudGljcyBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggb2JmdXNjYXRpb24uICAgDUl0IGlzIHVzZWZ1
bCB0byBjb25zaWRlciBjb21wYXRpYmlsaXR5IG9mIGxhbmd1YWdlIGVsZW1lbnRzLCBjb25zdHJ1
Y3RzLCBhYnN0cmFjdGlvbnMgYW5kIHBlcmZvcm1hbmNlIHNlcGFyYXRlbHkgZnJvbSBjb21wYXRp
YmlsaXR5IG9mIGNvbmNyZXRlIHN5bnRheC4gICBOZXcgc3ludGF4IGNhbiBvZnRlbiBiZSBhY2hp
ZXZlZCBzb2xlbHkgd2l0aCBleHRlbnNpb25zIGFuZCBhZGRpdGlvbnMuICBIb3dldmVyLCByZXZp
c2lvbnMgYXQgdGhlIGxldmVsIG9mIHN5bnRheCBwYXJzaW5nIG5lZWQgbm90IG5lY2Vzc2FyaWx5
IGV4Y2x1ZGUgdGhlIHBvc3NpYmlsaXR5IGZvciBhbHRlcm5hdGl2ZSBjb21waWxlciBzeW50YXgg
cHJvY2Vzc2luZyBzaWduYWxlZCBieSBwcmFnbWFzLiAgU3VjaCBwcmFnbWFzIGFyZSBhbHJlYWR5
IHVzZWQgYnkgdG9vbHMsIGZvciBzdWNoIHB1cnBvc2VzIGFzIGRlYnVnZ2luZyBhc3NlcnRpb25z
IGFuZCBlbmZvcmNpbmcgbG9jYWwgY29uc2lzdGVuY3kgZm9yIGNvZGluZyBzdHlsZXMgYW5kIHN0
YW5kYXJkcy4gIE5vdCBzeXN0ZW1hdGl6aW5nIHRoZXNlIHdpdGggbGFuZ3VhZ2UgZmFjaWxpdGll
cyBhZGRzIGNvbnNpZGVyYWJsZSBjb2RlIGNvbXBsZXhpdHkgYWxvbmcgd2l0aCBub24tc3RhbmRh
cmQgY29tcGlsZXIgb3B0aW9ucyBhbmQgZGlyZWN0aXZlcywgYW5kIG9mdGVuIGVuY291cmFnZXMg
cHJlcHJvY2Vzc2luZyBtYWNyb3MuIA1BcyBhIGZhaXJseSBzaW1wbGUgZXhhbXBsZSBvZiBzeW50
YXggZXh0ZW5zaW9uLCB0aGUgY29tcGlsZXIgY291bGQgYmUgbWFkZSBhd2FyZSBvZiBuZXcgbGlu
ZSBpbmRpY2F0aW9ucyBhbmQgaW5kZW50YXRpb24gdG8gc2ltcGxpZnkgcHVuY3R1YXRpb24gYW5k
IGVtcGhhc2lzIGNsYXJpdHkuICCTTW9kZXJuaXphdGlvbpQgb2YgQysrIHN5bnRheCBjb3VsZCBz
dGFydCB3aXRoIHJlbW92YWwgb2YgdHJpLWdyYXBoIHN1cHBvcnQuICANU3VjaCBjb25zaWRlcmF0
aW9ucyBhcmUgYXQgdGhlIGJvdW5kYXJpZXMgb2YgY29tcGlsZXIsIHByZXByb2Nlc3NvciBhbmQg
dG9vbCBzdXBwb3J0LiAgU3RhbmRhcmRpemF0aW9uIG9mIGEgbWluaW1hbCBjYW5vbmljYWwgc2V0
IG9mIGNvbnRyb2xzIGNhbiBpbmNyZWFzZSBjdXJyZW50IHBvcnRhYmlsaXR5LCBjb25zaXN0ZW5j
eSBhbmQgY2xhcml0eS4gDVRoZSBzdGFiaWxpdHkgaXNzdWUgdGhlbiBpcyBjb21wYXRpYmlsaXR5
IGZvciBpbnRlcm9wZXJhYmlsaXR5IG9mIG5ldyBhbmQgZXhpc3RpbmcgY29kZSwgdGhhdCBtYXkg
YmUgZXhwcmVzc2VkIHdpdGggc29tZXdoYXQgZGlmZmVyZW50IHN5bnRheC4gIFRoYXQgaXMsIGNv
bXBhdGliaWxpdHkgYmFzZWQgb24gd2hhdCB0aGUgbGFuZ3VhZ2Ugc2F5cywgcmF0aGVyIHRoYW4g
bmVjZXNzYXJpbHkgb24gaG93IGl0IHNheXMgaXQuIA1UZXJtaW5vbG9neQ1UZXJtaW5vbG9neSB1
c2VkIGZvciBzeW50YXggY2FuIGJlIG9idHVzZSBhbmQgZXZlbiBtaXNsZWFkaW5nLiAgk1N0YXRp
Y5QgaXMgYW4gaW50ZXJlc3RpbmcgZXhhbXBsZSAoc2VlIGJlbG93KS4NU29tZXRpbWVzIHRlcm1z
IGFyZSBpbnRyb2R1Y2VkIHRoYXQgaGF2ZSB0ZWNobmljYWwgbWVhbmluZyBmb3IgbGFuZ3VhZ2Ug
cHJvY2Vzc2luZyBvciBhcmUgYmFzZWQgb24sIGF0IGJlc3QsIGFuIGFuYWxvZ3kgd2l0aCBtYXRo
ZW1hdGljYWwgY29uY2VwdHMgdGhhdCBzZWVtIHNvbWV3aGF0IG9ic2N1cmUuICBNYXRoZW1hdGlj
YWwgcmlnb3IgaXMgYSBsb2Z0eSwgYnV0IHVuYWNoaWV2YWJsZSBhbmQgbWlzbGVhZGluZyBnb2Fs
IGZvciBzb2Z0d2FyZS4gIE1hdGhlbWF0aWNhbCB1bmRlcnBpbm5pbmdzIGNhbiBiZSB1c2VmdWwg
YnV0IHNlZW0gYmVzdCBsZWZ0IHRvIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uLCByYXRoZXIgdGhh
biBjb21tb24gdXNlLiAgRm9yIGluc3RhbmNlLCBheGlvbXMgYXJlIHVzZWZ1bCBmb3IgdGhlb3Jl
bSBwcm92aW5nLCBidXQgdGhlIGltcGxpZWQgbm90aW9uIGlzIG1pc2xlYWRpbmcgd2hlbiB0aGV5
IGFyZSBvbmx5IGRlZmluaXRpb25zIG9mIHR5cGUgcHJvcGVydGllcy4gIFRvIGJlIHJlYWxseSB1
c2VmdWwgdGhleSBuZWVkIHRvIGJlIGluY29ycG9yYXRlZCBpbiBhIHRlc3QgZmFjaWxpdHkuICAN
QSBHb2dnbGUgcXVlcnkgZm9yIJNyZWd1bGFyIHR5cGVzlCBwcm9kdWNlcyBhbiBhc3NvcnRtZW50
IG9mIHVucmVsYXRlZCBjb25jZXB0cy4gICCTU3RydWN0dXJlZJQgc2VlbXMgbW9yZSB1c2VyIGZy
aWVuZGx5IHRoYW4gk3NlbWktcmVndWxhcpQgdG8gaW5kaWNhdGUgb3BlcmF0aW9ucyBmb3IgYWxs
b2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBjb3B5LCBtb3ZlLCBhc3NpZ24sIGFuZCBzd2FwLiAgU2lt
aWxhcmx5LCCTZW50aXR5lCBjb3VsZCBpbmRpY2F0ZSBiYXNpYyBjbGFzc2VzIHRoYXQgYXJlIJNz
dHJ1Y3R1cmVklCwgYW5kIHdoaWNoIGFsc28gaGF2ZSBjb21wYXJpc29uIGFuZCBvcmRlcmluZyBv
cGVyYXRpb25zIGRlZmluZWQuICANT3RoZXIgYXBwcm9hY2hlcywgc3VjaCBhcyByZXVzZSBvZiBl
eGlzdGluZyBrZXl3b3JkLCBsZWFkIHRvIGFtYmlndWl0eSBhbmQgY29uZnVzaW9uLg1TeW50YXgg
UnVsZXMNVGhlIGluY3JlZGlibGUgY29tcGxleGl0eSwgdG8gd2hpY2ggdGhlIEMrKyBzdGFuZGFy
ZCBoYXMgZXZvbHZlZCwgaXMgYnJlYXRodGFraW5nLiAgVW5kb3VidGVkbHkgbXVjaCBvZiB0aGlz
IGlzIHVuYXZvaWRhYmxlOyBpdCBjb21lcyB3aXRoIHRoZSB0ZXJyaXRvcnkgYW5kIHRoZSBuZWVk
IHRvIGJlIHByZWNpc2UuICBQZXJoYXBzLCB0aG91Z2gsIHRoZXJlIGFyZSBzaWduaWZpY2FudCBz
dHJhdGVnaWVzIGZvciBzaW1wbGlmaWNhdGlvbi4gICANT25lIHN1Y2ggYXBwcm9hY2ggdGhhdCBz
ZWVtcyB0byBkcml2ZSBjb21wbGV4aXR5LCB0byBhIHNpZ25pZmljYW50IGV4dGVudCwgaXMgYSBk
ZXNpcmUgZm9yIHRoZSBzeW50YXggdG8gYmUgY29tcGxldGUsIGluIHRoZSBzZW5zZSB0aGF0IHRo
ZSBjb21waWxlciB0cmllcyB0byBtYWtlIGRlY2lzaW9ucyBhcyB0byB0aGUgbWVhbmluZyBvZiBj
b25zdHJ1Y3RzIHVuZGVyIGEgdmFyaWV0eSBvZiBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcy4gICBU
aGlzIGNhbiBsZWFkIHRvIGRlc2lnbiBvZiBlbGFib3JhdGUgaW50ZXJwcmV0YXRpb25zIHRoYXQg
YXNzdW1lIHRoYXQgk3RoZSBjb21waWxlciBrbm93cyBiZXN0lC4gICBVbmRlciBwYXJ0aWN1bGFy
IGNvbmRpdGlvbnMsIHRoZSBjb21waWxlciBkcml2ZW4gaW50ZXJwcmV0YXRpb25zIG1heSBiZSB1
bmludHVpdGl2ZSwgYW5kIGV2ZW4gYW1iaWd1b3VzLCByZWxhdGl2ZSB0byB0aGUgcHJvZ3JhbW1l
ciBpbnRlbnQuICBUaGUgYWx0ZXJuYXRpdmUgZm9yIHJ1bGUgc2ltcGxpZmljYXRpb24gaXMgbm90
IHRvIGd1ZXNzIGF0IGludGVudCwgYnV0LCByYXRoZXIgdGhhbiBkZWZpbmluZyBleGNlcHRpb25z
IHRvIGV4Y2VwdGlvbnMsIHNpbXBseSBkZWNsYXJlIGFuIGVycm9yIGFuZCByZXF1aXJlIHRoYXQg
dGhlIHByb2dyYW1tZXIgcHJvdmlkZSBjbGFyaWZpY2F0aW9uLiAgDUFuIGltbWVkaWF0ZSBleGFt
cGxlLCBwZWhhcHMsIGlzIHRoZSBzZXZlbiBzaXR1YXRpb25zIHVzZWQgZm9yIG92ZXJsb2FkIHJl
c29sdXRpb24uICBJdCBjYW4gbWFrZSBzZW5zZSBmb3IgdGhlIGNvbXBpbGVyIHRvIGFwcGx5IHJl
YXNvbmFibGUgY29udmVyc2lvbnMgdG8gbWVldCBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zLiAgSG93
ZXZlciwgd2hlbiB0aGlzIHByb2R1Y2VzIG11bHRpcGxlIGNhbmRpZGF0ZXMsIGFuZCB0aGVyZSBp
cyBub3QgYW4gZWFzaWx5IHJlbWVtYmVyZWQgYW5kIGludHVpdGl2ZSBydWxlIGZvciBzZWxlY3Rp
b24sIGRvbpJ0IHRyeSBmb3IgYSCTYmVzdJQgbWF0Y2guDVR5cGUgRXh0ZW5zaW9ucw1QcmV2aW91
cyBub3RlcyBoYXZlIHN1Z2dlc3RlZCB0aGF0IHRlbXBsYXRlIHR5cGUgcGFyYW1ldGVycyBhcmUg
ZXNzZW50aWFsbHkgk0Fic3RyYWN0IFR5cGVzlC4gIFRoYXQgaXMsIGEgbm90aW9uIG9mIGluY29t
cGxldGUgdHlwZXMgdGhhdCBhYnN0cmFjdCBmcm9tIGRldGFpbHMgb2Ygc2l6ZSwgb3JkZXJpbmcg
YW5kIGxheW91dCBhc3NvY2lhdGVkIHdpdGggc3RydWN0IGJhc2VkIGRlY2xhcmF0aW9ucy4gIEFi
c3RyYWN0IHR5cGVzIGNhbiBiZSBleHRlbmRlZCB0aHJvdWdoIGluc3RhbnRpYXRpb247IG11Y2gg
YXMgYmFzZSB0eXBlcyBhcmUgZXh0ZW5kZWQgYnkgZGVyaXZlZCBjbGFzc2VzLiAgU3VjaCBleHRl
bnNpb25zIGNhbiBiZSBiaWRpcmVjdGlvbmFsIGFzIGluIHJvbGUtYWN0b3IgY29uc3RydWN0cywN
SW4gdGhpcyB3YXksIGRlY2xhcmF0aW9ucyBvZiB0aGUgQWJzdHJhY3QgVHlwZXMgd2l0aCBhbGwg
b2YgdGhlIGNvbnN0cnVjdHMgZm9yIHRlbXBsYXRlIGRlZmluaXRpb24gY2FuIGFsbG93IHRlbXBs
YXRlIGNvZGUgdG8gYXBwZWFyLCB0byBiZSB3cml0dGVuIGFuZCB0byBiZSBjb21waWxlZCBlc3Nl
bnRpYWxseSB0aGUgc2FtZSBhcyBhbnkgb3RoZXIgY29kZS4gICBPdGhlciBub3RlcyBkaXNjdXNz
IGJpbmRpbmcgb2YgY29tcGlsZWQgdGVtcGxhdGVzIHRvIGFjdHVhbCBjb25jcmV0ZSB0eXBlcy4g
IA1WYXJpYW50cyBwcm92aWRlIGEgY29tcGxlbWVudGFyeSBub3Rpb24gb2YgdHlwZSBleHRlbnNp
b24uICBSYXRoZXIgdGhhbiBwcm92aWRpbmcgY29tbW9uIHN0cnVjdHVyZSB0aGF0IGNhbiBhZGFw
dCB0byBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eSwgdGhleSBzdXBwb3J0IGNvbW1vbiBmdW5jdGlv
bnMgdGhhdCBjYW4gYWRhcHQgdG8gZGlmZmVyZW50IHN0cnVjdHVyZS4gICAgDUFzcGVjdHMNQXMg
YSBiYXNpcyBmb3IgbWFuYWdlbWVudCBvZiBzb2Z0d2FyZSBjb21wb25lbnQgZGVwZW5kZW5jaWVz
LCBhIGNsYXNzIGRlY2xhcmF0aW9uIGNhbiBzcGVjaWZ5IGRpZmZlcmVudCBpbnRlcmZhY2VzLCBv
ciBBc3BlY3RzLCBmb3IgZGlmZmVyZW50IHVzZXJzLiAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGdl
bmVyYWxpemF0aW9uIG9mIHRoZSCTZnJpZW5klCBjb25jZXB0LiANQXNwZWN0cyBhbmQgQWJzdHJh
Y3QgVHlwZXMgYm90aCBmb3JtIHBhcnRpYWwgdmlld3Mgb2YgYSB0eXBlLiAgQXNwZWN0cyBhcmUg
cGFydHMgb2YgYW4gYWJzdHJhY3Qgb3IgY29uY3JldGUgdHlwZS4gIEFic3RyYWN0IFR5cGVzIGFy
ZSBwYXJ0cyB0aGF0IHN0aWxsIG5lZWQgdG8gYmUgbWFwcGVkIHRvIGEgY29uY3JldGUgdHlwZS4g
IEZyb20gdGhpcyBwZXJzcGVjdGl2ZSwgQWJzdHJhY3QgdHlwZXMgYXJlIGVzc2VudGlhbGx5IGFu
IEFzcGVjdCBvZiBhIHR5cGUuIA1UbyBhdm9pZCBvdmVyIHNwZWNpZmljYXRpb24gb2YgYW4gaW50
ZXJmYWNlLCBhIHVzZXIgY2FuIHJlcXVpcmUgc29tZSBzdWJzZXQgb2YgQXNwZWN0cywgd2hpbGUg
c3RpbGwgYWxsb3dpbmcgZm9yIHVzZSBvZiBvcHRpb25hbCBjb25zdHJ1Y3RzLCB3aGVyZSBhdmFp
bGFibGUuICBGb3IgaW5zdGFuY2UsIGEgY29tcGxldGUgc2V0IG9mIG1lbWJlciBhbmQgbm9uLW1l
bWJlciBmdW5jdGlvbnMgZm9yIGNvbXBhcmlzb24gY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gZ2Vu
ZXJpYyCTPJQgYW5kIJM9PZQgb3BlcmF0b3JzLCB3aGlsZSBzdGlsbCBhbGxvd2luZyBmb3IgZGly
ZWN0IHVzZSBvZiBvdGhlciBjb25zdHJ1Y3RzIGlmIGF2YWlsYWJsZS4gDUFsdGVybmF0aXZlcyBj
YW4gYWxzbyBiZSB1c2VkIHRvIGF2b2lkIHVuZGVyIHNwZWNpZmljYXRpb24gb2YgYSBDYXBhYmls
aXR5IGJ5IGFsbG93aW5nIHZhcmlhbnQgYXBwcm9hY2hlcy4gICBGb3IgaW5zdGFuY2UsIGFuIGl0
ZXJhdGlvbiBDYXBhYmlsaXR5IGNvdWxkIGJlIGltcGxlbWVudGVkIHRvIHVzZSBhIJNmb3KUIGxv
b3AgdXNpbmcgZW5kLCBsYXN0LCBjb3VudCBvciBjb25kaXRpb25hbCBtZW1iZXIgYW5kIG5vbi1t
ZW1iZXIgdGVybWluYXRpb24gaW5kaWNhdG9ycywgb3Igd2l0aCBsaXN0IHJlY3Vyc2lvbiwgb3Ig
d2l0aCBlaXRoZXIsIGRlcGVuZGluZyBvbiB0aGUgQ2FwYWJpbGl0aWVzIHN1cHBsaWVkLiANQ2Fw
YWJpbGl0aWVzDUNvbmNlcHRzIGFyZSBhIHNwZWNpZmljYXRpb24gbWVjaGFuaXNtIGZvciB0ZW1w
bGF0ZSB0eXBlIGRlY2xhcmF0aW9ucy4gIENvbmNlcHQgc3ludGF4IHNwZWNpZmljYXRpb25zIGFy
ZSBwcm9wb3NlZCBmb3IgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgYW5kIGZvciB0aGVpciBpbnRl
cmFjdGlvbnMuICBJbiB0aGlzIHNlbnNlLCB0aGV5IGFyZSBmdWxsIGVxdWl2YWxlbnQgdG8sIGFu
ZCBpbmRlZWQgbXVzdCBtYXRjaCwgdGhlIGRlY2xhcmF0aW9uIHN5bnRheCBmb3IgdGhlIHN1cHBs
aWVkIHR5cGVzLiANQ29uY2VwdHMsIHRoZW4sIGFyZSBiYXNpY2FsbHkgYW4gaW50ZXJmYWNlIHNw
ZWNpZmljYXRpb24uICBUaGlzIHN1Z2dlc3RzIHR3byBnZW5lcmFsaXphdGlvbnMuICBGaXJzdCwg
dGhlIHNhbWUgZGVjbGFyYXRpb25zIGFyZSBhcHBsaWNhYmxlIHRvLCBhbmQgY291bGQgYmUgdXNl
ZCBzaW1pbGFybHkgZm9yLCBib3RoIHRoZSBnZW5lcmljIGRlY2xhcmF0aW9ucyBhbmQgdGhlIHN1
cHBsaWVkIHR5cGUgZGVjbGFyYXRpb25zLiAgVGhlIHNlY29uZCBvYnNlcnZhdGlvbiBpcyB0aGF0
IHN1Y2ggZGVjbGFyYXRpb25zIGFyZSBzaWduaWZpY2FudCwgd2hldGhlciBvciBub3QgdGhleSBh
cmUgdXNlZCBmb3IgdGVtcGxhdGVzLiAgVGhlIHRoaXJkIG9ic2VydmF0aW9uIGhlcmUgaXMgdGhh
dCwgd2hlcmUgdGhlIGRlY2xhcmF0aW9ucyBhcmUgZXF1aXZhbGVudCBidXQgZG8gbm90IG1hdGNo
IGRpcmVjdGx5LCB0aGVuIG1hcHBpbmdzIGNhbiBiZSBwcm92aWRlZC4gDVRoaXMgc3VnZ2VzdHMg
YSBtb3JlIGdlbmVyYWwgbm90aW9uIG9mIJNDYXBhYmlsaXRpZXOUIGFzIGEgZnVuZGFtZW50YWwg
Y29uc3RydWN0IGZvciBzcGVjaWZ5aW5nIGJvdGggd2hhdCBpcyByZXF1aXJlZCBhbmQgd2hhdCBp
cyBzdXBwbGllZCBieSBhbiBpbnRlcmZhY2UuICBBIHVzZXIgc3BlY2lmaWVzIHRoZSBDYXBhYmls
aXR5IGRlY2xhcmF0aW9ucyBmb3Igd2hhdCBpdCBuZWVkcywgYW5kIHRoZSBpbXBsZW1lbnRhdGlv
biBzcGVjaWZpZXMgdGhlbSBmb3Igd2hhdCBpdCBzdXBwbGllcy4gIFRoZSBDYXBhYmlsaXR5IGRl
Y2xhcmF0aW9uLCBpdHNlbGYsIGNhbiBzcGVjaWZ5IG1hcHBpbmdzIGZvciBhbHRlcm5hdGl2ZSBj
b25zdHJ1Y3RzIGZvciBpdHMgdXNlIG9yIHN1cHBvcnQuICANVGhpcyBzdXBwb3J0cyB0aGUgZnVu
ZGFtZW50YWwgYWJzdHJhY3Rpb24gb2YgYSBzb2Z0d2FyZSBzeXN0ZW0gY29uc2lzdGluZyBvZiBD
YXBhYmlsaXRpZXMgYnVpbHQgZnJvbSBvdGhlciBDYXBhYmlsaXRpZXMuICANQ2FwYWJpbGl0aWVz
IGV4dGVuZCB0eXBlIGV4dHJhY3Rpb25zLiAgVHlwZSBhYnN0cmFjdGlvbnMgZW5jYXBzdWxhdGUg
cmVwcmVzZW50YXRpb24gYW5kIG1ldGhvZCBmb3IgYW4gaW50ZXJmYWNlIGJhc2VkIG9uIHN5bnRh
eCBkZWNsYXJhdGlvbnMuICBDYXBhYmlsaXRpZXMgY2FwdHVyZSBiYXNpYyBpbnZhcmlhbnRzIHRo
YXQgYXJlIGFsc28gaW5kZXBlbmRlbnQgb2YgcmVwcmVzZW50YXRpb24gYW5kIG1ldGhvZCwgYW5k
IHRoZXkgYWxzbyBnZW5lcmFsaXplIHRoaXMgdG8gaW5kZXBlbmRlbmNlIG9mIHN5bnRheCBleHBy
ZXNzaW9uIGFuZCBkYXRhIHNvdXJjZS4gDUFsc28sIENhcGFiaWxpdGllcyBleHRlbmQgdGhlIG5v
dGlvbiBvZiBhIGNsYXNzIHdoaWNoIGFic3RyYWN0cyBvcGVyYXRpb25zIG9uIGEgc2luZ2xlIGRh
dGEgb2JqZWN0LCB0byBhbiBhYnN0cmFjdGlvbiBvZiBvcGVyYXRpb25zIG9uIHRoZSBpbnRlcmFj
dGlvbiBvZiBtdWx0aXBsZSBpbnRlcmFjdGluZyBvYmplY3RzLiAgVGhlc2UgaW50ZXJhY3Rpb25z
IGNhbiBiZSBhdCBhIGNvbW1vbiBsZXZlbCwgYXMgaW4gdHJhbnNmb3JtYXRpb25zLCBvciBuZXN0
ZWQsIGFzIHdpdGggU1RMIGNvbnRhaW5lcnMuIA1DYXBhYmlsaXR5IHN5bnRheCBpcyBpbmhlcmVu
dGx5IGFuIGV4dGVuZGVkIEFic3RyYWN0IFR5cGUgZGVjbGFyYXRpb24uICBDYXBhYmlsaXR5IGRl
Y2xhcmF0aW9ucyBjb25zaXN0IG9mIGEgcGFyYW1ldGVyaXplZCBzZXQgb2YgdHlwZSBzcGVjaWZp
Y2F0aW9ucyBhbG9uZyB3aXRoIHZhbHVlIGV4cHJlc3Npb25zIHRoYXQgdXNlIHRoZXNlIHR5cGVz
LCBhbmQsIHdoZXJlIHJlcXVpcmVkLCB0aGV5IGluY2x1ZGUgbWFwcGluZ3MgZm9yIG9uZSBmb3Jt
IG9mIHR5cGUgb3IgdmFsdWUgZXhwcmVzc2lvbiB0byBhbm90aGVyLiAgUHJvcG9zYWxzIGZvciBh
IENvbmNlcHRzIHNwZWNpZmljYXRpb24gcHJvdmlkZSBhIGJhc2UgZm9yIHN1Y2ggYW4gYXBwcm9h
Y2guICANU2luY2UgQ2FwYWJpbGl0aWVzIGFyZSBzcGVjaWZpY2F0aW9ucyBhdCB0aGUgbGV2ZWwg
b2YgaW50ZXJmYWNlcywgdGhleSBjYW4gYWxzbyBwcm92aWRlIGEgYmFzZSBmb3Igc3lzdGVtYXRp
Y2FsbHkgaW5zZXJ0aW5nIGNvZGUgZm9yIG1ldHJpY3MsIHJlcG9ydGluZywgbG9nZ2luZywgZXJy
b3IgaGFuZGxpbmcsIGV0Yy4gICANTWFwcGluZ3MNT2Z0ZW4gdGhlcmUgaXMgYSBkaXJlY3QgY29y
cmVzcG9uZGVuY2UgZnJvbSB0aGUgY29uc3RydWN0cyBuZWVkZWQgYnkgYSBDYXBhYmlsaXR5IGFu
ZCB0aG9zZSBzdXBwbGllZCBmb3IgaXQuICAgV2hlbiB0aGUgQ2FwYWJpbGl0aWVzIGFyZSBlcXVp
dmFsZW50LCBidXQgc3BlY2lmaWVkIGRpZmZlcmVudGx5LCBhIENhcGFiaWxpdHkgaW50ZXJmYWNl
IGRlY2xhcmF0aW9uIGNhbiBwcm92aWRlIG1hcHBpbmdzIGJvdGggZm9yIGRhdGEsIGZvciBvcGVy
YXRpb25zIGFuZCBmb3IgdHlwZXMuIA1EYXRhIG1hcHBpbmdzIGNhbiBiZSBmb3IgbG9jYXRpb24s
IG9yZ2FuaXphdGlvbiwgcmVwcmVzZW50YXRpb24gYW5kIGZvcm1hdC4NT3BlcmF0aW9uIG1hcHBp
bmdzIGluY2x1ZGUgYmFzaWMgY29tcHV0YXRpb25hbCBjb25zdHJ1Y3RzLiAgVGhlIFNUTCBwcm92
aWRlcyBleGFtcGxlcyBmb3IgaXRlcmF0aW9uIChiZWdpbiwgbmV4dCwgZW5kKSwgYWNjZXNzIChy
ZWFkLCB3cml0ZSksIHN0cnVjdHVyZSAoY29weSwgbW92ZSwgYXNzaWdubWVudCwgc3dhcCkgYW5k
IGNvbXBhcmlzb24gKG9yZGVyaW5nLCBlcXVpdmFsZW5jZSwgZXF1YWxpdHkpLiAgSW52b2tlLCBj
YWxsYWJsZSwgYW5kIHBhcmFtZXRlciBwYWNrcyBwcm92aWRlIG1vZGVscyBmb3IgZnVuY3Rpb25z
IGFuZCB0aGVpciBwYXJhbWV0ZXJzLiAgQ29uc2lkZXJhYmxlIGV4dGVuc2lvbiBjYWxsYWJsZSBp
cyBwb3NzaWJsZSwgc3VjaCBhcyBwcm92aWRpbmcgk2ludm9rZZQgc3BlY2lmaWNhdGlvbnMgZm9y
IHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMsIHF1ZXVlZCBjYWxscywgbWVzc2FnZXMgYW5kIGV2ZW50
cywgYW5kIGV4Y2VwdGlvbnMuDVRoZSBjYXBhYmlsaXRpZXMgYWJvdmUgY2FuIGJlIHJlcHJlc2Vu
dGVkIHdpdGggYW4gYWJzdHJhY3Qgc3ludGF4IGZvciB2YWx1ZSBleHByZXNzaW9ucy4gIFRoaXMg
Y2FuIGJlIGV4dGVuZGVkIHRvIHR5cGUgZXhwcmVzc2lvbnMgdGhhdCBlbnN1ZSBjb2hlcmVudCBj
b3JyZXNwb25kZW5jZSBhbW9uZyByZWxhdGVkIHR5cGVzIGFuZCB0eXBlIGNvbnN0cnVjdHMuICBU
aGVzZSBjb3VsZCBpbmNsdWRlIGNhcGFiaWxpdGllcyBmb3IgZ2VuZXJhdGlvbiwgbW9kaWZpY2F0
aW9uIGFuZCB0ZXN0IChyZWZlcmVuY2UgY2xhc3NpZmljYXRpb24sIHF1YWxpZmllcnMsIGF0dHJp
YnV0ZXMsIGRlcml2YXRpb24sIGluY2x1c2lvbiwgdHJhaXRzLCAgLiAuIC4gICksIGNvbXBhcmUs
IHRyYW5zZm9ybSAoY2FzdCksIGV0Yy4gICAgDVBhcnRzDVN5c3RlbWF0aWMgZXh0ZW5zaW9uIG9m
IHN1Y2ggY2FwYWJpbGl0aWVzIGNvdWxkIGZvcm0gdGhlIGJhc2lzIGZvciBmdW5kYW1lbnRhbCBj
b21wb25lbnRzIG5lY2Vzc2FyeSB0byBkcml2ZSBzb21lIGRvbWFpbiBzcGVjaWZpYyBsYW5ndWFn
ZXMgb3IgZXZlbiBhIHNtYWxsIGdlbmVyYWwgcHVycG9zZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVu
dCBsYW5ndWFnZS4NQWRkaXRpb25hbCBDYXBhYmlsaXRpZXMgY2FuIGJlIGRldmVsb3BlZCBmb3Ig
bG9naWMgKGFuZCwgb3IsIHhvciwgbm90KSwgYXJpdGhtZXRpYyAocGx1cywgbWludXMsIG11bHRp
cGx5LCBkaXZpZGUsIHJlbWFpbmRlciksIGJpdCBmaWVsZHMgKGdldCwgc2V0KSwgcmVmZXJlbmNl
cyhwb2ludGVyLCBpbmRleCwgbWFwLCBwYXRoKSwgZGVjaXNpb25zIChjb25kaXRpb24sIHRyZWUp
LCBkYXRhYmFzZSAocmVhZCwgdXBkYXRlLCBpbnNlcnQsIHJlbW92ZSwgZmluZCksIHNlcXVlbmNl
KCB2aXNpdCwgYWNjdW11bGF0ZSwgbWVyZ2UsIHNvcnQsICwgLiAuIC4pLCB0cmFuc2FjdGlvbnMg
KGRvLCB1bmRvLCBwcmVwYXJlLCBjb21taXQsIGJhY2tvdXQpLCBjb250cm9sIChzdGFydCwgaW5p
dCwgcmUtaW5pdCwgcnVuLCBwYXVzZSwgc3RvcCksIHN0YXRlIG1hY2hpbmVzIChzdGF0ZSwgZXZl
bnQsIHRyYW5zaXRpb24pLCB0cmF2ZXJzYWwgKHJvdXRlLCB2aXNpdCksIHVzZSBjYXNlIChvYmpl
Y3RpdmUsIHN0ZXApLCBldGMuICBNb3JlIGJhc2ljIGNhcGFiaWxpdGllcyBzdXBwb3J0IHN1Y2gg
Y2FwYWJpbGl0aWVzIGFzIHJlYWRhYmxlLCBhc3NpZ25hYmxlLCBjYWxsLCBwYXJhbWV0ZXIsIHJl
ZmVyZW5jZWQsIHJlbGF0ZWQsIGV0Yy4gIFRoZXNlIGNhcGFiaWxpdHkgc3BlY2lmaWNhdGlvbnMg
Y2FuIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIGFsdGVybmF0aXZlIGV4cHJlc3Npb25zLCBhcyB3
ZWxsIGFzIGhpZGluZyB0aGUgY29tcGxleGl0aWVzIG9mIEMrKyB0eXBlIHN5bnRheC4gIA1UaGUg
dWx0aW1hdGUgb2JqZWN0aXZlIGhvd2V2ZXIsIGlzIGdlbmVyYWwgc3VwcG9ydCBmb3IgcGFydHMg
ZHJpdmVuIHNvZnR3YXJlIGRldmVsb3BtZW50IGFuZCBjb25zdHJ1Y3Rpb24uICBUaGlzIGhhcyBi
ZWVuIGEgbG9uZyBzb3VnaHQgYWZ0ZXIgZ29hbCBmb3IgbWFueSwgYW5kIG9mdGVuIHRoZXJlIGhh
dmUgYmVlbiBleHRyYXZhZ2FudCBjbGFpbXMgZm9yIHN1Y2Nlc3MuICBFeGlzdGluZyB0ZWNobm9s
b2d5IGhhcyBpbmRlZWQgcHJvZHVjZWQgYSBjb25zaWRlcmFibGUgY29sbGVjdGlvbiBvZiBwYXJ0
cy4gIFRoZSBmb2N1cyBoZXJlLCBob3dldmVyLCBpcyBub3Qgb24gcGFydHMgdGhlbXNlbHZlcywg
b3Igb24gZGlzY292ZXJpbmcgdGhlIGhvbHkgZ3JhaWwgb2YgYSBmdW5kYW1lbnRhbCBhbmQgdW5p
dmVyc2FsIHNldCBvZiBwYXJ0cy4gIFJhdGhlciwgdGhlIGtleSBmb2N1cyBpcyBvbiB0aGUgbWVj
aGFuaXNtcyBmb3IgY29ubmVjdGluZyBwYXJ0cy4NQWJzdHJhY3QgU3ludGF4DUFuIGFic3RyYWN0
IHN5bnRheCByZXByZXNlbnRzIHRoZSBzZW1hbnRpY3Mgb2YgYSBzeW50YXggY29uc3RydWN0IGFu
ZCB0aGUgY29tcG9uZW50cyBvciB0ZXJtcyB1c2VkIHRvIGRlbm90ZSB0aG9zZSBzZW1hbnRpY3Mu
ICAgQXMgd2l0aCBvdGhlciBhYnN0cmFjdGlvbnMgdGhlcmUgaXMgb2Z0ZW4gZ2VuZXJhbGl0eSBo
ZXJlIHRoYXQgY2FuIGxlYWQgdG8gaW5jcmVhc2VkIGZ1bmN0aW9uYWxpdHkuDUEgY29uY3JldGUg
c3ludGF4IHJlcHJlc2VudHMgYSBwYXJ0aWN1bGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21w
b25lbnRzLCB1c3VhbGx5IGFzIHNvbWUgc2V0IG9mIGtleXdvcmRzLCBicmFja2V0cyBhbmQgc3Bl
Y2lhbCBzeW1ib2xzLiAgQWx0ZXJuYXRpdmVseSwgaXQgY2FuIHVzZSBkaWFncmFtcyBhbmQgdGFi
bGVzIGFuZCBvdGhlciBwcmVzZW50YXRpb24gZm9ybXMuICBDYXBhYmlsaXRpZXMgYWxzbyByZXBy
ZXNlbnQgYSB3YXkgb2YgcmVwcmVzZW50aW5nIHRoZSBzZW1hbnRpY3Mgb2YgYSBjb25zdHJ1Y3Qg
aW5kZXBlbmRlbnRseSBvZiBhbnkgcGFydGljdWxhciBzeW50YXguICBJbiBhZGRpdGlvbiB0aGV5
IGV4dGVuZCB0aGlzIHdpdGggc3VwcG9ydCBmb3IgYWx0ZXJuYXRpdmUgc3ludGF4IGNvbXBvbmVu
dHMgYW5kIGZvciBhbHRlcm5hdGl2ZSBkYXRhLg1BbiBhYnN0cmFjdCBzeW50YXggc3VwcG9ydHMg
aW50ZXJvcGVyYWJpbGl0eSBhbW9uZyBkaWZmZXJlbnQgc3ludGFjdGljYWwgcmVwcmVzZW50YXRp
b25zLiAgQ2FwYWJpbGl0aWVzIHN1cHBvcnQgaW50ZXJvcGVyYWJpbGl0eSBmb3IgZGlmZmVyZW50
IHN5bnRheCwgc3ludGF4IGNvbXBvbmVudHMgYW5kIGRhdGEgc291cmNlcy4gDU5hbWUgVXNlIERp
ZmZlcmVudGlhdGlvbg1DbGFyaXR5IGluIHRoZSB1c2Ugb2YgbmFtZXMgZm9yIGlkZW50aWZpY2F0
aW9uIG9mIGRpZmZlcmVudCBjYXRlZ29yaWVzIG9mIGlkZW50aWZpZXJzIGlzIGNyaXRpY2FsIGlu
IGFueSBzeW50YXguICAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBnZW5lcmlj
IGNvZGUuICBGb3IgaW5zdGFuY2UsIGVsYWJvcmF0ZSBzeW50YXggY2FuIGJlIHVzZWQgd2l0aCBi
cmFja2V0cyBhbmQga2V5IHdvcmRzIHRvIGRpc3Rpbmd1aXNoIHR5cGUgYW5kIG9iamVjdCBuYW1l
cyBhbmQgdGhlaXIgc2NvcGVzLiAgIEZvciBjbGFyaXR5IGluIGNvZGUgcmVhZGluZywgbmFtaW5n
IGNvbnZlbnRpb25zLCBzdWNoIGFzIGxlYWRpbmcgY2FwcyBvciB0cmFpbGluZyCTdHlwZZQgb3Ig
cGx1cmFsIJNzlCBzdWZmaXhlcyBhcmUgb2Z0ZW4gdXNlZCB0byBkaXN0aW5ndWlzaCB0eXBlIG5h
bWVzIGZyb20gb2JqZWN0IG5hbWVzLiAgRmFyIHNpbXBsZXIsIGFuZCBjb25zaXN0ZW50LCB3b3Vs
ZCBiZSBhIGRpc3Rpbmd1aXNoaW5nIG5hbWluZyBjb252ZW50aW9uLiAgVGhpcyB3b3VsZCBwcm92
aWRlIGxhbmd1YWdlIGNvbnNpc3RlbmN5IGFuZCBjbGFyaXR5LiAgIE1vcmUgc2lnbmlmaWNhbnRs
eSwgaXQgY291bGQsIGluIGZhY3QsIGdyZWF0bHkgc2ltcGxpZnkgdGhlIHN5bnRheC4gICAgDUFu
IGV4dHJlbWUgYXBwcm9hY2ggdG8gdGhpcyBjYW4gYmUgZm91bmQgaW4gd2hhdCBpcyBrbm93biBh
cyBIdW5nYXJpYW4gTm90YXRpb24sIGEgcmF0aGVyIGVsYWJvcmF0ZSBhcHByb2FjaCB0byBjb252
ZXlpbmcgdHlwZSBpbmZvcm1hdGlvbi4gIE1vcmUgYXBwcm9wcmlhdGUgaG93ZXZlciwgaXMgdG8g
Zm9jdXMgb24gdGhlIGRpZmZlcmluZyB1c2VzIG9mIG5hbWVzIGZvciB0aGUgcHJpbWFyeSBhYnN0
cmFjdGlvbnMgb2Ygb2JqZWN0LCB0eXBlIGFuZCBhYnN0cmFjdCB0eXBlLiAgIEZvciBpbnN0YW5j
ZSwgcmVmZXJlbmNlIHRvIHR5cGVzLCBjbGFzc2VzLCBzdHJ1Y3RzLCBhbmQgdW5pb25zIG1pZ2h0
IGJlIGlkZW50aWZpZWQgd2l0aCBhIHByZWZpeCBvZiCTI5QuICBBYnN0cmFjdCBUeXBlcyByZXBy
ZXNlbnQgYSBoaWdoZXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gYW5kIGNvdWxkIGJlIGRlY2xhcmVk
IHdpdGggYSBwcmVmaXggc3VjaCBhcyCTIyOUIG9yIJMhlC4gIFRoZSBwcmVmaXggY2FuIGJlIHVz
ZWQgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBpbnRyb2R1Y2VkIHRvIHNpbXBsaWZ5IHN5bnRheC4g
IEl0IGlzIHByb2JhYmx5IG5vdCBhcyBpbXBvcnRhbnQgZm9yIHN1YnNlcXVlbnQgdXNlIG9mIHRo
ZSBpZGVudGlmaWVyLCBidXQgaXRzIGNvbnNpc3RlbnQgdXNlIGNhbiBlbmhhbmNlIGNsYXJpdHkg
aW4gbWFueSBjb250ZXh0cy4gDUV4YW1wbGU6IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbmNlcHQg
Ym9vbCBDID0gdHJ1ZTsNYmVjb21lczogICMjQyANQWxzbywgc2luY2UgdGhleSBhcmUgZnVuZGFt
ZW50YWxseSB2ZXJ5IGRpZmZlcmVudCB0aGluZ3MsIGl0IGlzIHVzZWZ1bCB0byBkaXN0aW5ndWlz
aCBhc3NpZ25tZW50IG9mIHR5cGUgZXhwcmVzc2lvbnMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAACAAKACQISkAIABmAHIAbwBtACAAbwBiAGoAZQBjAHQAIABlAHgAcABy
AGUAcwBzAGkAbwBuAHMAIAAoAD0AKQAsACAAYQBzACAAdwBlAGwAbAAgAGEAYgBzAHQAcgBhAGMA
dAAgAHQAeQBwAGUAIABhAG4AZAAgAG4AYQBtAGUAcwBwAGEAYwBlACAAYwBvAG0AcABvAG4AZQBu
AHQAcwAgACgAOgA6ACkAIABmAHIAbwBtACAAbwBiAGoAZQBjAHQAIABjAG8AbQBwAG8AbgBlAG4A
dABzACAAKAAuACkALgAgAA0AVwBpAHQAaAAgAHQAaABpAHMALAAgAG0AbwBzAHQAIAB1AHMAZQBz
ACAAbwBmACAAHCB0AHkAcABlAGQAZQBmAB0gLAAgABwgdAB5AHAAZQBuAGEAbQBlAB0gLAAgABwg
dQBzAGkAbgBnAB0gLAAgABwgcgBlAGIAaQBuAGQAHSAsACAAYQBuAGQAIABlAHYAZQBuACAAHCB0
AGUAbQBwAGwAYQB0AGUAHSAgAGEAbgBkACAAYQBuAGcAbABlACAAYgByAGEAYwBrAGUAdABzACAA
YwBhAG4AIABiAGUAIABlAGwAaQBtAGkAbgBhAHQAZQBkAC4AIAAgAEMAbwBuAHMAaQBkAGUAcgAg
AHQAaABlACAAZgBvAGwAbABvAHcAaQBuAGcALAAgAHcAaABpAGMAaAAgAGoAdQBzAHQAIABzAHAA
dQB0AHQAZQByAHMAIAB3AGkAdABoACAAHCB0AHkAcABlAB0gIABzAHkAbABsAGEAYgBsAGUAcwA6
AA0ACQB0AHkAcABlAGQAZQBmACAAdAB5AHAAZQBuAGEAbQBlACAAQgBhAHMAZQBUAHkAcABlADoA
OgB2AGEAbAB1AGUAXwB0AHkAcABlACAAdgBhAGwAdQBlAF8AdAB5AHAAZQANAEEAbgAgAGEAbAB0
AGUAcgBuAGEAdABpAHYAZQAgAG0AaQBnAGgAdAAgAGIAZQAgAGEAIAB0AHkAcABlACAAZQB4AHAA
cgBlAHMAcwBpAG8AbgAgAHMAdQBjAGgAIABhAHMAOgANACAACQAjAHYAYQBsAHUAZQAgAJAhIAAj
ACMAQgBhAHMAZQA6ADoAIwB2AGEAbAB1AGUAOwANAEEAdQB0AG8ADQBBAHUAdABvACAAaQBzACAA
YQAgAHUAcwBlAGYAdQBsACAAcABsAGEAYwBlAGgAbwBsAGQAZQByACAAZgBvAHIAIABhACAAdAB5
AHAAZQAgAHQAaABhAHQAIABjAGEAbgAgAGIAZQAgAGQAZQBkAHUAYwBlAGQALgAgACAAVABoAGkA
cwAsACAAaABvAHcAZQB2ZXIsIGxvc2VzIGluZm9ybWF0aW9uIHNpbmNlIHRoZSBhY3R1YWwgcmVz
dWx0aW5nIHR5cGUgbmFtZSBpcyBoaWRkZW4uICBBbiBhbHRlcm5hdGl2ZSBpcyCTI3R5cGWUIHRv
IGNhcHR1cmUgdGhlIG5hbWUgb2YgdGhlIHR5cGUuICANRm9yIGV4YW1wbGU6DSAgICAjbGVuZ3Ro
IGxlbmd0aCA9IHZlY3Rvci5zaXplKCApIDsgIA1Gb3IgY29uc2lzdGVuY3ksIHRoZSBiYXNpYyBh
dXRvIGtleXdvcmQgcGxhY2Vob2xkZXIgY291bGQgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbXBsZSCT
I5QsIGFuZCB0aHVzIGVsaW1pbmF0ZSBjb25mdXNpb24gd2l0aCBhbGxvY2F0aW9uIGNvbmNlcHRz
Lg1FeGFtcGxlcw1BbiBiYXNpYyBleGFtcGxlIGNhbiBiZSB0YWtlbiBmcm9tIFNUTCBwcm9wb3Nh
bHM6DQl0ZW1wbGF0ZTx0eXBlbmFtZSBUPiALIAkgCWNvbmNlcHQgYm9vbCBSZWFkYWJsZSgpIHsL
IAkJCSByZXR1cm4gcmVxdWlyZXMgKFQgaSkgeyALIAkJCQl0eXBlbmFtZSBWYWx1ZV90eXBlOyB7
CyAJCQkJeyppfSAtPiBjb25zdCBWYWx1ZV90eXBlJjsLIAkJCX07IAsgCQl9Ow1UaGlzIGRlZmlu
ZXMgYSBwcm9wZXJ0eSBvZiBpdGVyYXRvcnMuICBUaGUgbW9yZSBnZW5lcmFsIGNvbmNlcHQgaXMg
UmVhZGFibGUsIHdoaWNoIGNhcHR1cmVzIHRoZSBnZW5lcmFsIENhcGFiaWxpdHkgdG8gZXh0cmFj
dCBhIHZhbHVlIGZyb20gYW4gZXhwcmVzc2lvbiwgYW5kIHdoaWNoIGlzIHN1Z2dlc3RlZCBiZWxv
dy4gIA1UaGUgZXhhbXBsZSBhc3N1bWVzIHRoYXQgdGhlIGJhc2UgbGFuZ3VhZ2UgZGVmaW5lcyBv
cGVyYXRpb25zIGZvciB0aGUgdXNlIG9mIHJlYWRhYmxlIGFuZCB3cml0ZWFibGUgdmFsdWVzIChz
dWNoIGFzIGFzc2lnbmFibGUpLiAgQ2FwYWJpbGl0eSBkZWNsYXJhdGlvbnMgYmVsb3cgcHJvdmlk
ZSBhIG1lYW5zIGZvciBhY2Nlc3NpbmcgdmFsdWVzIHRocm91Z2ggdXNlIG9mIGRpdmVyc2Ugc3lu
dGF4IGNvbnN0cnVjdHMuICBGb3IgaW5zdGFuY2UsIGEgdGVtcGxhdGUgbWlnaHQgYWNjZXNzIGEg
ZGF0YSB2YWx1ZSBpbiBhIGNvbnRhaW5lciBvciB3aGVyZSB0aGUgdmFsdWUgaXRzZWxmIGlzIGdl
bmVyYXRlIGJ5IGEgcGFydGljdWxhciBzdXBwbGllciB0aHJvdWdoIGEgZnVuY3Rpb24uICBUaGUg
dXNpbmcgY29kZSBkb2VzbpJ0IGNhcmUgICAgICANRXhhbXBsZXMgLSAgIHJlcXVpcmVtZW50cyBp
biBzcXVhcmUgYnJhY2tldHMgdXNlICYmLCB8fCwgID8gYW5kIH4gIGZvciCTYW5klCwgk29ylC4g
k29wdGlvbmFslCBhbmQgk25vdJQgZXhwcmVzc2lvbnMuIA0gICAgIEFzc2lnbmFibGUgIHsjI1dy
aXRlYWJsZSB3ICYmICMjUmVhZGFibGUgcjsgdz1yICwgfSA7IA0gICAgIFJlYWRhYmxlIHsgDQkg
ICAgICAvLyAgVmFsdWUNCQkoIyNWYWx1ZSB2KSB7IFt2ID9jb25zdCA/JiApIHx8ICh2KCkgP2Nv
bnN0ID8mKSB8fCggdi5nZXQoKSA/Y29uc3QgPyYpICB9Ow0gICAgICAgICAgICAvLyAgQWNjZXNz
DSAgICAgICAgICAgICAoIyNWYWx1ZSB2LCAjUmVhZGFibGUgcikgeyByIAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACSISAAdgAgAH0AOwANACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvAC8A
IAAgAFAAbwBpAG4AdABlAHIACwAJAAkACQAgACAAKAAjACMAUABvAGkAbgB0AGUAcgAgAHAAIAAs
ACAAIwAjAFAAbwBpAG4AdABlAHIAOgA6ACMAUgBlAGEAZABhAGIAbABlACAAcgAgACkAIAB7ACoA
IAA/AGMAbwBuAHMAdAAgAHAAIACSISAAcgB9ADsAIAANACAAIAAgACAAIAAgACAAIAAgACAAIAAg
ACAAIAAvAC8AIAAgAEYAdQBuAGMAdABpAG8AbgANACAACQAJACAAIAAoACMAIwBGAHUAbgBjAHQA
aQBvAG4AIABmACAALAAgACMAIwBBAHIAZwB1AG0AZQBuAHQAIABhACwAIAAgACMAIABSAGUAYQBk
AGEAYgBsAGUAIAByACAAKQAgAHsAZgAoAGEAKQAgAJIhIAByAH0AIAA7ACAADQAJACAAIAAgACAA
IAAgACAAIAAvAC8AIAAgAE0AZQBtAGIAZQByAA0AIAAJACAAIAAgACAAIAAgACAAIAAoAGMAbwBu
AHMAdAAgACMAIwBCAGEAcwBlACAAYgAsACAAIwBNAGUAbQBiAGUAcgAgAG0ALAAgAGMAbwBuAHMA
dAAgACMAIABSAGUAYQBkAGEAYgBsAGUAIAByACkACwAgACAAIAAgACAAIAAgACAAIAAgACAAIAAg
ACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAewBbACAAYgAuAG0AIACSISAAcgApACAAXQAgAHwA
fAAgAFsAIAAoAGIALgBtACgAIAApACAAkiEgAHIAIABdACAAfAB8ACAAWwAgACgAYgAuAG0ALgBn
AGUAdAAoACAAKQAgACAAkiEgAHIAIABdACAAKQB9ADsADQAgACAAIAAgACAAIAAgACAAIAAgACAA
IAAgACAALwAvACAAIABDAG8AbQBwAG8AbgBlAG4AdAANACAAIAAgACAAIAAgACAAIAAgACAAIAAg
ACAAIAAoACAAIwAjAEMAIACQISAAKAAjACMATQBhAHAAfAB8ACMAIwBWAGUAYwB0AG8AcgB8AHwA
IwAjAGEAcgByAGEAeQApACAAYwAsACAAIwAjAEkAbgBkAGUAeAAgAGkALAAgACMAIABSAGUAYQBk
AGEAYgBsAGUAIAByACkAIAB7AGMAWwBpAF0AIACSIXIAfQAgADsADQAgACAAIAAgACAAIAAgACAA
IAAgACAAIAAgAC4AIAAuACAALgAgAA0AIAAgACAAIAAgACAAIAAgAC8ALwAgAEEAIABjAG8AbQBt
AG8AbgAgAEcAZQB0ACAAZgB1AG4AYwB0AGkAbwBuACwAIABzAGkAbQBpAGwAYQByACAAdABvACAA
HCBpAG4AdgBvAGsAZQAdICAAZgBvAHIAIAAcIGMAYQBsAGwAYQBiAGwAZQAdICAAYwBvAHUAbABk
ACAAYgBlACAAdQBzAGUAZAAuACAADQAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAARwBlAHQA
IAAoACMAIwBQAG8AaQBuAHQAZQByACAAcAAsACAAIAAjACAAUgBlAGEAZABhAGIAbABlACAAcgAp
ACAADQAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAewAqAHAAIACSISAA
cgApACAAOwANACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABHAGUAdAAgACgAIwAjAEYAdQBu
AGMAdABpAG8AbgAgAGYAIAAsACAAIwAjAFAAYQByAGEAbQBlAHQAZQByACAAYQAsACAAIwAgAFIA
ZQBhAGQAYQBiAGwAZQAgAHIAKQAgAA0AIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAg
ACAAIAAgAHsAZgAoAGEAKQAgAJIhIAByAH0AOwANACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAA
IABHAGUAdAAgACgAIwAjAEIAYQBzAGUAIABiACwAIABNAGUAbQBiAGUAcgAgAG0ALAAgACAAIwAg
AFIAZQBhAGQAYQBiAGwAZQAgAHIADQAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAA
IAAgAHsAKAAgAGIALgBtACAAkiEgAHYAIAA/ACYAKQAgAHwAfAAgACgAYgAuAG0AKAAgACkAIACS
ISAAdgAgAD8AJgApACAAfAB8ACAAKABiAC4AbQAuAGcAZQB0ACgAIAApACAAkiEgAHIAfQA7AA0A
IAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAEcAZQB0ACAAKAAgACMAIwBDACAAkCEgACgAIwAj
AE0AYQBwAHwAfAAjACMAVgBlAGMAdABvAHIAfAB8ACMAIwBhAHIAcgBhAHkAKQAgAGMAIAAsACAA
IwAjAEkAbgBkAGUAeAAgAEkALAAgACMAIwBDADoAOgAjACAAUgBlAGEAZABhAGIAbABlACAAcgAp
AA0AIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB7ACAAYwBbAGkAXQAgAJIh
cgAgAH0AOwAgACAAIAAgACAADQAgACAAIAAgACAAfQA7AAkACQAJAA0AIAAgACAAIAAgAC4AIAAu
ACAALgALACAAIAAgACAAIAAgACAAIAAgACAAIAAjACMAVwByAGkAdABlAGEAYgBsAGUAIAB7ACAA
UgBlAGEAZABhAGIAbABlACAAfgBjAG8AbgBzAHQALAAgAC4AIAAuACAALgAgAH0AIAA7ACAADQAg
ACAAIAAgACAAIwAjAE0AbwBkAGkAZgBpAGEAYgBsAGUAIAB7ACAAIwAjAFIAZQBhAGQAYQBiAGwA
ZQAgACYAJgAgACMAIwBXAHIAaQB0AGUAYQBiAGwAZQAgACAAfQA7ACAADQBUAGgAZQBuACAAdwBl
ACAAYwBhAG4AIABoAGEAdgBlADoAIAANACAAIAAgACAAIAAgAHgAIAAgAGkAbgB0ACAAkCEjACMA
VwByAGkAdABlAGEAYgBsAGUAOgA6AFMAZQB0ACAAKABtAGEAcAAsACAAaQBuAGQAZQB4ACkAIAA7
ACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAALwAqACAAcwBwAGUAYwBpAGYAaQBlAGQA
IABiAHkAIAB1AHMAZQByACAAbwByACAAcwB1AHAAcABsAGkAZQByAA0AIAAgACAAIAAgACAAeQAg
AGkAbgB0ACAAkCEgACMAIwBSAGUAYQBkAGEAYgBsAGUAOgA6ACAARwBlAHQAIAAoAGYAdQBuAGMA
dABpAG8AbiwgYXJndW1lbnQpIDsgIC8qIHNwZWNpZmllZCBieSBzdXBwbGllciBvciB1c2VyDSAg
ICAgIHggPSB5IDsgIC8vaW52b2tlcyBHZXQgYW5kIFNldA1UaGUgYWJvdmUgaXMgYSBmYWlybHkg
dHJpdmlhbCBleGFtcGxlLCBidXQgaXQgaWxsdXN0cmF0ZXMgdGhlIHByaW5jaXBsZSBvZiBzZXBh
cmF0aW9uIG9mIG1lY2hhbmlzbXMgZm9yIGFjY2VzcyB0byBkYXRhIGNvbnN0cnVjdHMgZnJvbSB0
aGUgZnVuY3Rpb25hbCBvcGVyYXRpb25zIG9uIHRoZSBkYXRhIHZhbHVlcy4gIA1Db250YWluZXIg
YWNjZXNzIHByb3ZpZGVzIHNvbWUgaW50ZXJlc3RpbmcgcG9zc2liaWxpdGllcyBmb3Igc3ludGF4
IGNvbW1vbmFsaXR5IGZvciBnZW5lcmFsaXphdGlvbnMgc3VjaCBhcyCTaW5zZXJ0lC4NICAgSW5z
ZXJ0ICgjIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABWAJAhIwAjAFYAZQBjAHQAbwByACAAdgAsACAAIwAjAFYAOgA6ACMARQBsAGUAbQBlAG4A
dAAgAGUAKQAgAJIhIwAjAFYAIAB2AA0AIAAgACAAIAAgACAAIAAgAHsAdgAuAGUAbQBwAGwAYQBj
AGUAXwBiAGEAYwBrACAAKABlACkAIACSIXYAfQA7AA0AIAAgACAASQBuAHMAZQByAHQAIAAoACMA
IwBWAJAhIwAjAFYAZQBjAHQAbwByACAAdgAsACAAIwAjAFYAOgA6ACMAUABvAHMAaQB0AG8AbgAg
AHAALAAgACMAIwBWADoAOgAjAEUAbABlAG0AZQBuAHQAIABlACkAIACSISAAIwAjAFYAIAB2AA0A
IAAgACAAIAAgACAAIAAgAHsAIAB2AC4AZQBtAHAAbABhAGMAZQAoAHYALAAgAHAALAAgAGUAKQAg
AJIhIAB2AH0AOwAgACAAIAANACAAIAAgAEkAbgBzAGUAcgB0ACAAKAAjACMATACQISMAIwBMAGkA
cwB0ACAAbAAsACAAIwAjAEwAOgA6ACMAUABvAHMAaQB0AGkAbwBuACAAcAAsACAAIwAjAEwAOgA6
ACMARQBsAGUAbQBlAG4AdAAgAGUAKQCSISAAIwAjAEwAIABsACAAIAANACAAIAAgACAAIAAgACAA
IAB7ACAAbAAuAGkAbgBzAGUAcgB0ACgAcAAsACAAZQApACAAfQCSISAAbAAgAH0AOwAgAA0AIAAg
ACAASQBuAHMAZQByAHQAKAAjACMATQCQISMAIwBNAGEAcAAgAG0ALAAgACMAIwBNADoAOgAjAEsA
ZQB5ACAAawAsACAAIwAjAE0AOgA6ACMAIwBFAGwAZQBtAGUAbgB0ACAAZQApACAAkiEjACMATQAg
AG0ACwAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAewAgAG0ALgBlAG0AcABsAGEAYwBlACgA
awAsACAAZQApACAAkiEgAG0AIAB9ADsAIAAgACAAIAAgACAADQAgACAAIABJAG4AcwBlAHIAdAAo
ACMAIwBNAJAhIwAjAE0AYQBwACAAbQAsACAAIwAjAE0AOgA6ACMAUABhAGkAcgAgAHAAKQAgAJIh
IwAjAE0AIABtAAsAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAHsAIABtAC4AZQBtAHAAbABh
AGMAZQAoAHAALgBmAGkAcgBzAHQALAAgAHAALgBzAGUAYwBvAG4AZAApACAAkiEgAG0AIAB9ADsA
IAAgACAAIAAgAA0AIAAgACAASQBuAHMAZQByAHQAKAAjACMATQCQISMAIwBNAGEAcAAgAG0ALAAg
ACMAIwBNADoAOgAjAEUAbABlAG0AZQBuAHQAIABlACkAIACSISMAIwBNACAAbQALACAAIAAgACAA
IAAgACAAIAAgACAAIAAgACAAIAB7ACAAbQAuAGUAbQBwAGwAYQBjAGUAKABlAC4AawBlAHkAKAAg
ACkALAAgAGUAKQAgAJIhIABtACAAfQA7ACAAIAAgACAAIAANAE8AcgAsACAAbQBvAHIAZQAgAGcA
ZQBuAGUAcgBhAGwAbAB5ADoADQAgACAAIABJAG4AcwBlAHIAdAAgACgAIwAjAEMAkCEjACMAQwBv
AG4AdABhAGkAbgBlAHIAIABjACwAIAAjACMAQwA6ADoAIwBFAGwAZQBtAGUAbgB0ACAAZQApACAA
kiEjACMAQwAgAGMAIAANACAAIAAgACAAIAAgACAAIAB7ACAAKABJAG4AcwBlAHIAdAAgACgAYwAs
ACAAZQApACAAkiEgAGMAfQAgADsADQAgACAAIABJAG4AcwBlAHIAdAAgACgAIwAjAEMAkCEjACMA
QwBvAG4AdABhAGkAbgBlAHIAIABjACwAIAAjACMAQwA6ADoAIwBQAG8AcwBpAHQAaQBvAG4AIABw
ACwAIAAjACMAQwA6ADoAIwBFAGwAZQBtAGUAbgB0ACAAZQAgACkAIACSISMAIwBDACAAYwANACAA
IAAgACAAIAAgACAAIAB7ACAAKABJAG4AcwBlAHIAdAAoAGMALAAgAHAALAAgAGUAKQAgAJIhYwAg
AH0AOwANAEEAbgBkACwAIABzAHQAaQBsAGwAIABiAGUAdAB0AGUAcgAgAHkAZQB0ACwAIABvAHYA
ZQByAGwAbwBhAGQAIAAcIDwAPAAdICAAZgBvAHIAIABjAG8AbgB0AGEAaQBuAGUAcgAgAGEAbgBk
ACAAcwB0AHIAZQBhAG0AIABpAG4AcwBlAHIAdAAgAGEAbgBkACAAHCAuAB0gIABmAG8AcgAgAGUA
bABlAG0AZQBuAHQAIABhAGMAYwBlAHMAcwAgAGEAbgBkACAAdQBzAGUAOgANACAAIAAgACAAIAAg
ACAAYwAgADwAPAAgAGUAIAAgADsAIAANACAAIAAgACAAIAAgACAAYwAgADwAPAAoAHAAKQAgAGUA
IAA7ACAAIAAgAC8AKgAgAG8AcgAgACoALwAgADsAIABjAC4AcAAgADwAPAAgAGUAIAA7AA0AQQBu
AG8AdABoAGUAcgAgAHUAcwBlAGYAdQBsACAAZQB4AHQAZQBuAHMAaQBvAG4AIABjAG8AdQBsAGQA
IABiAGUAIABiAGEAcwBlAGQAIABvAG4AIAAcIGkAbgB2AG8AawBlAB0gLAAgAHQAbwAgAHMAdQBw
AHBseSBhIGNvbnRpbnVhdGlvbiBmdW5jdGlvbiBjYWxsLiAgVGhpcyBzdXBwb3J0cyBhIHVzZWZ1
bCBwYXR0ZXJuIGZvciBwaXBlcy4gIEFsc28sIHRoaXMgY291bGQgYmUgY29tYmluZWQgd2l0aCB0
ZXN0cyB0byBoYW5kbGUgc3BlY2lhbCBjb25kaXRpb25zLCBlcnJvcnMgYW5kIGV4Y2VwdGlvbnMu
DVNvbWV3aGF0IGRpZmZlcmVudCBhcmUgcmVxdWlyZW1lbnRzIGZvciBleHByZXNzaW9ucyBvdmVy
IHR5cGUgY29uc3RydWN0cy4gIEZvciBleGFtcGxlOiANCXRlbXBsYXRlPHR5cGVuYW1lIFQ+IAsg
CQljb25jZXB0IGJvb2wgSW5wdXRfcmFuZ2UoKSB7CyAJCQkgcmV0dXJuIHJlcXVpcmVzKFQgcmFu
Z2UpIHsgCyAJCQkJdHlwZW5hbWUgSXRlcmF0b3JfdHlwZTsLIAkJCQlyZXF1aXJlcyBJbnB1dF9p
dGVyYXRvcjsgCyAJCQl9OwsgCQkgfTsNVGhpcyBjYW4gYmVjb21lOg0JIyNJbnB1dF9yYW5nZSAg
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
kCEgACMAIwBSAGEAbgBnAGUAOgA6ACMASQB0AGUAcgBhAHQAbwByADoAOgBjAGEAdABlAGcAbwBy
AHkAIAA9AD0AIABJAG4AcAB1AHQAIAA7AA0AQQBuACAAbwBiAGoAZQBjAHQAaQB2AGUAIABmAG8A
cgAgAHQAaABlAHMAZQAgAHMAeQBuAHQAYQB4ACAAYwBvAG4AcwB0AHIAdQBjAHQAcwAgAGkAcwAg
AHQAaABhAHQALAAgAHcAaQB0AGgAIABsAGkAdAB0AGwAZQAgAHAAcgBhAGMAdABpAGMAZQAsACAA
dABoAGUAIABzAHkAbgB0AGEAeAAgAGMAYQBuACAAYgBlACAAcgBlAGEAZAAsACAAYQBuAGQAIABn
AGUAbgBlAHIAYQBsAGwAeQAgAHcAcgBpAHQAdABlAG4ALAAgAGQAaQByAGUAYwB0AGwAeQAgAGYA
cgBvAG0AIAB0AGgAZQBpAHIAIABpAG4AdABlAG4AZABlAGQAIABzAGUAbQBhAG4AdABpAGMAcwAu
ACAAIAANAFAAcgBpAG4AYwBpAHAAbABlAHMADQBUAGgAZQBzAGUAIABlAHgAYQBtAHAAbABlAHMA
IABpAGwAbAB1AHMAdAByAGEAdABlACAAZgB1AG4AZABhAG0AZQBuAHQAYQBsACAAcAByAGkAbgBj
aXBsZXMgb2YgY29udGV4dCBhY2Nlc3MsIG9mIHByb2Nlc3MgYWJzdHJhY3Rpb24sIGFuZCBvZiBn
ZW5lcmFsaXR5LiAgDVRoZSBhcHByb2FjaCBlZmZlY3RpdmVseSBwcm92aWRlcyBhIGdlbmVyYWwg
bWVjaGFuaXNtIGZvciBjb21wdXRhdGlvbnMgb3ZlciB2YWx1ZXMsIHRoYXQgaXMgc2VwYXJhdGVk
IGZyb20gdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIHZhbHVlcyByZXNpZGUsIGFuZCBmcm9tIHdo
ZXJlIHRoZXkgbXVzdCBiZSBleHRyYWN0ZWQgYW5kIGluc2VydGVkLiAgDVRoaXMgZXNzZW50aWFs
bHkgcHJvdmlkZXMgYSBiYXNlIGZvciBleHBsb2l0aW5nIG1hbnkgb2YgdGhlIGNvbnN0cnVjdHMg
YW5kIGZhY2lsaXRpZXMgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4NSXQgcHJvdmlkZXMgYSBt
ZWNoYW5pc20gZm9yIHN5c3RlbSBhbmQgdXNlciBsaWJyYXJpZXMgdG8gZW5jYXBzdWxhdGUgYW5k
IHRoZXJlYnkgZXhwbG9pdCB0aGUgZXh0ZW5zaXZlIHN5bnRheCBtZWNoYW5pc21zIHRoYXQgYXJl
IGV2b2x2aW5nIGZvciBDKyssIGluIGEgbWFubmVyIHRoYXQgbGVuZHMgdG8gaW5jcmVhc2VkIHJl
YWRhYmlsaXR5IGFuZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1c2luZyBjb2RlIGZ1bmN0aW9uYWxp
dHkuICANTW9yZSBnZW5lcmFsbHksIGl0IGNhbiBzdXBwb3J0IGEgcmFuZ2Ugb2YgYWJzdHJhY3Rp
b25zIGZvciB0eWVwcywgZGF0YSBhbmQgcHJvY2Vzc2luZywgd2hpY2ggY2FuIHRoZW4gYmUgc2Vw
YXJhdGVseSBtYXBwZWQgdG8gY29uY3JldGUgaW1wbGVtZW50YXRpb25zLiAgDUZ1bmN0aW9uIFBh
cmFtZXRlcnMgDU11Y2ggb2YgdGhlIGNvbXBsZXhpdHkgb2YgcGFyYW1ldGVyIHR5cGUgc3BlY2lm
aWNhdGlvbiBpcyB0aWVkIHVwIHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiBtYXBwaW5nIGZ1bmN0
aW9uIGNhbGwgYXJndW1lbnRzIHRvIGRlY2xhcmF0aW9uIHBhcmFtZXRlcnMuDUZ1bmN0aW9uIGRl
Y2xhcmF0aW9ucyBzcGVjaWZ5IGhvdyB0aGUgZnVuY3Rpb24gY2FuIHVzZSBzdXBwbGllZCBwYXJh
bWV0ZXJzIHdpdGggdmFyaW91cyBjYXRlZ29yaWVzIG9mIG1vZGVzIGZvciByZWFkLCByZWZlcmVu
Y2UsIG1vZGlmeSwgY29weSBhbmQgbW92ZS4gIEMrKyBzcGVjaWZpY2F0aW9ucyB1c2UgY29uc3Qg
YW5kIHJlZmVyZW5jZSBkZWNvcmF0b3JzIHRvIGluZGlyZWN0bHkgaW5kaWNhdGUgd2hhdCBpcyBp
bnRlbmRlZC4gIFRoaXMgc3RhcnRlZCBvdXQgdG8gYmUgcmVhc29uYWJseSBzdHJhaWdodGZvcndh
cmQsIHVudGlsIHJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlcyBhbmQgc3BlY2lhbCBzdXBwb3J0IGZv
ciCTcnZhbHVlc5Qgd2VyZSBuZWVkZWQuIA1NdWNoLCBpZiBub3QgYWxsIG5lZWRlZCBzaW1wbGlm
aWNhdGlvbiBhbmQgY2xhcml0eSBjYW4gb2NjdXIgd2l0aCBzeW50YXggZm9yIHRoZSBkZWNsYXJh
dGlvbiBvZiBhIHBhcmFtZXRlciB0aGF0IGRpcmVjdGx5IGluZGljYXRlcyBpdHMgcHVycG9zZSBh
bmQgaXRzIHVzZS4gIEluIG1hbnkgY2FzZXMgdGhpcyBjYW4gc3RhcnQgd2l0aCBzaW1wbHkgZGlz
dGluZ3Vpc2hpbmcgaW5wdXRzIGZyb20gb3V0cHV0cyBpbiB0aGUgZnVuY3Rpb24gZGVjbGFyYXRp
b24uICBUaGlzIGlzIGRvbmUgaW4gc29tZSBsYW5ndWFnZXMgd2l0aCBzcGVjaWZpYyCTaW6UIGFu
ZCCTb3V0lCBtb2RlIHNwZWNpZmljYXRpb25zIGZvciB0aGUgcGFyYW1ldGVyLiAgU2luY2Ugk2lu
lCBpcyB0aGUgbW9zdCBjb21tb24gaXQgY2FuIGJlIGVsaWRlZC4gIEFsc28sIHdoZXRoZXIgb3Ig
bm90IGEgY29weSBpcyBtYWRlIGludGVybmFsbHkgYnksIG9yIGZvciB0aGUgZnVuY3Rpb24gaXMg
b2Ygbm8gY29uY2VybiB0byB0aGUgY2FsbGVyIG9yIHRvIHRoZSBkZWNsYXJhdGlvbi4gICAgV2l0
aCB0aGlzIJNvdXSUIHBhcmFtZXRlcnMgaW5kaWNhdGUgdmFsdWVzIHRoYXQgdGhlIGZ1bmN0aW9u
IGNhbiBtb2RpZnkuICBSZXR1cm4gcGFyYW1ldGVycyBhcmUgdmFsdWVzIHRoZSBmdW5jdGlvbiBj
YW4gcmV0dXJuLCBpbmNsdWRpbmcgdHVwbGVzLiAgVGhlc2UgY2F0ZWdvcmllcyBjYW4gYmUAIABz
AHAAZQBjAGkAZgBpAGUAZAAgAHMAZQBwAGEAcgBhAHQAZQBsAHkALgAgACAARgBvAHIAIABpAG4A
cwB0AGEAbgBjAGUAOgAgACAADQAJAGYAdQBuAGMAdABpAG8AbgBOAGEAbQBlACAAKABpAG4AUABh
AHIAbQBzACAALgAgAC4AIAAuACAAIAApACgAbwB1AHQAUABhAHIAbQBzACAALgAgAC4AIAAuACAA
KQAgAJIhIAByAGUAcwB1AGwAdAA7AA0ARgB1AG4AYwB0AGkAbwBuACAAaQBuAHYAbwBjAGEAdABp
AG8AbgAgAGMAbwB1AGwAZAAgAHIAZQBxAHUAaQByAGUAIAB0AGgAZQAgAGUAeAB0AHIAYQAgAGIA
cgBhAGMAawBlAHQAcwAgAGYAbwByACAAdABoAGUAIABzAGEAawBlACAAbwBmACAAYwBsAGEAcgBp
AHQAeQAuACAAIABUAGgAZQAgAGMAbwBtAHAAaQBsAGUAcgAgAGMAYQBuACAAZABlAGMAaQBkAGUA
LAAgAGEAdAAgAGwAZQBhAHMAdAAgAGYAbwByACAAbQBvAHMAdAAgAGMAYQBzAGUAcwAsACAAYQBt
AG8AbgBnACAAYwBvAHAAeQAsACAAbQBvAHYAZQAgACgAaQBmACAAYQB2AGEAaQBsAGEAYmxlKSwg
cmVmZXJlbmNlLCBjb25zdCwgcG9pbnRlciBleHRyYWN0aW9uLCBjb3B5IGVsaXNpb24sIGV0Yy4g
ICBBbHNvLCBpZiB0aGVyZSBpcyBzb21lIHBhcnRpY3VsYXIgbmVlZCBpbiB0aGUgZGVjbGFyYXRp
b24sIGEgcHJvZ3JhbW1lciBjYW4gc3BlY2lmeSBjb252ZXJzaW9ucywgdG8gYmUgdXNlZCBvciBw
cmVmZXJyZWQuICAgICAgDZNNb3ZlIHNlbWFudGljc5QgaW50cm9kdWNlcyBhIGNvbXBsZXRlbHkg
ZGlmZmVyZW50IG1vZGUgb2YgcGFyYW1ldGVyIHVzZTsgaS5lLiwgdmFsdWVzIHRoYXQgY2FuIGJl
IGludmFsaWRhdGVkLiAgVGhlc2UgYXJlIHVzZWQgZm9yIGNvcHlpbmcgb2YgdGVtcG9yYXJpZXMg
YW5kIGFyZSBjaG9zZW4gaW1wbGljaXRseSB0aHJvdWdoIGZ1bmN0aW9uIG92ZXJsb2FkLiAgVGhl
c2UgY2FuIGJlIGNsZWFybHkgaW5kaWNhdGVkIHdpdGggYW4gYWRkaXRpb25hbCBtb2RlIGNhdGVn
b3J5LiANCWZ1bmN0aW9uTmFtZSAoaW5QYXJtcyAuIC4gLiAgKShvdXRQYXJtcyAuIC4gAC4AIAAp
ACgAbQBvAHYAZQBQAGEAcgBtAHMAIAAuACAALgAgAC4AIAApAJIhIAByAGUAcwB1AGwAdAA7AA0A
VABoAGUAcgBlACAAaQBzACAAYQBsAHMAbwAgAGEAIABjAGEAdABlAGcAbwByAHkAIABvAGYAIABn
AGUAbgBlAHIAaQBjACAAcABhAHIAYQBtAGUAdABlAHIAcwAgAHQAaABhAHQAIABjAGEAbgAgAGIA
ZQAgAHAAYQBzAHMAZQBkACAAdABvACAAYQAgAGYAdQBuAGMAdABpAG8AbgAgAGEAbgBkACAAYwBh
AG4AIABiAGUAIABvAGYAIABhAG4AeQAgAG8AZgAgAHQAaABlACAAYQBiAG8AdgBlACAAYwBhAHQA
ZQBnAG8AcgBpAGUAcwAuACAAIABUAGgAZQBzAGUAIABhAHIAZQAgAHQAaABlAG4AIABmAG8AcgB3
AGEAcgBkACAAdABvACAAYQAgAHMAcABlAGMAaQBmAGkAYwAgAGYAdQBuAGMAdABpAG8AbgAgAGkA
bgB2AG8AYwBhAHQAaQBvAG4AIABmAG8AcgAgAHcAaABpAGMAaAAgAGEAbABsACAAdABoAGUAIABy
AHUAbABlAHMAIABvAGYAIABmAHUAbgBjAHQAaQBvAG4AIABvAHYAZQByAGwAbwBhAAAIAAAECAAA
CwgAABkIAAAaCAAAGwgAACgIAABUCAAAYggAAGUIAABpCAAAwAgAAMoIAADPCAAA+wgAAPwIAAAX
CQAAGAkAABkJAACCCQAAigkAAJMJAACkCQAAswkAALQJAAC/CQAAzgkAANoJAADfCQAA5AkAABwK
AAAuCgAAOQoAAFIKAADy5dfGuPKuoa6hrpeNl42XjZeul66NroTld5d3bXdjd1YAAAAYFWjqEmcA
FmjQTV0AT0oAAFFKAABeSgAAABIWaMczQABPSgAAUUoAAF5KAAAAEhZosCMOAE9KAABRSgAAXkoA
AAAYFWjqEmcAFmjnMSwAT0oAAFFKAABeSgAAABAVaPF6/QAWaPF6/QB0SAAAABIWaC8lVQBPSgAA
UUoAAF5KAAAAEhZooFGDAE9KAABRSgAAXkoAAAAYFWjqEmcAFmgRJmUAT0oAAFFKAABeSgAAABIW
aBEmZQBPSgAAUUoAAF5KAAAAGhZoFHxqAE9KAABRSgAAXkoAAG1ICQRzSAkEACAVaOoSZwAWaHUr
3gBPSgAAUUoAAF5KAABtSAkEc0gJBAAaFmgRJmUAT0oAAFFKAABeSgAAbUgJBHNICQQAGBVo6hJn
ABZoqjM+AE9KAABRSgAAXkoAAAAaFmjxev0AT0oAAFFKAABeSgAAbUgJBHNICQQhAAgAABoIAAAb
CAAAKAgAALQJAAC/CQAAugoAAFgMAAAhDwAANRAAAFMQAADNEQAA2BMAAFkUAACFFAAArhQAAAIW
AADrFwAA+RcAADoZAAA8GgAACh0AAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAA
AAAAAPUAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAOsAAAAAAAAAAAAAAADm
AAAAAAAAAAAAAAAA4QAAAAAAAAAAAAAAANwAAAAAAAAAAAAAAADXAAAAAAAAAAAAAAAA1wAAAAAA
AAAAAAAAANIAAAAAAAAAAAAAAADSAAAAAAAAAAAAAAAA0gAAAAAAAAAAAAAAAMkAAAAAAAAAAAAA
AADEAAAAAAAAAAAAAAAAvwAAAAAAAAAAAAAAALoAAAAAAAAAAAAAAAC6AAAAAAAAAAAAAAAAugAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAGdkckAdAAAEAwBnZHJAHQAABAAAZ2QXBZEAAAgAABGE
AABghAAAZ2QXBZEAAAQAAGdkkmqOAAAEAABnZIsmYQAABAMAZ2SLJmEAAAQAAGdkGU6yAAAEAABn
ZMxyXAAABAAAZ2QafW0AAAQAAGdk0E1dAAAEAABnZPF6/QAABAMAZ2SbYj0AABVSCgAAaAoAAKoK
AAC1CgAAtgoAALkKAAC6CgAAuwoAAMgKAADVCgAA1goAAOAKAAD1CgAA9goAAPcKAAAyCwAAVwsA
AFgLAABaCwAAXwsAAGsLAAB6CwAAhQsAAIsLAACOCwAAEgwAADUMAAA2DAAARQwAAEYMAABUDAAA
WAwAAL0MAADIDAAA+gwAABoNAAAbDQAALA0AAC0NAAAyDQAAMw0AAEQNAABFDQAAcg0AAHwNAAD2
6d/V6cvBtKe037TBtOnBncGQnZCdkJ2QndWd1Z2QhvaGnXydfJ18nXxyfAAAAAASFmh5I68AT0oA
AFFKAABeSgAAABIWaBR8agBPSgAAUUoAAF5KAAAAEhZoSHhMAE9KAABRSgAAXkoAAAAYFWjqEmcA
FmgafW0AT0oAAFFKAABeSgAAABIWaBp9bQBPSgAAUUoAAF5KAAAAGBVo6hJnABZoxGWgAE9KAABR
SgAAXkoAAAAYFWjqEmcAFmj4OxkAT0oAAFFKAABeSgAAABIWaPg7GQBPSgAAUUoAAF5KAAAAEhZo
Aiy2AE9KAABRSgAAXkoAAAASFmjHM0AAT0oAAFFKAABeSgAAABIWaLAjDgBPSgAAUUoAAF5KAAAA
GBVo6hJnABZo0E1dAE9KAABRSgAAXkoAAAASFmhNSSEAT0oAAFFKAABeSgAALHwNAACPDQAAmA0A
AMUNAADODQAA0w0AAA4OAAATDgAAXw4AAGAOAAB6DgAAfg4AAIkOAACLDgAAmQ4AAMoOAADODgAA
0Q4AANwOAADrDgAA9w4AACAPAAAhDwAAMg8AADQPAABTDwAAWg8AAMYPAADKDwAANBAAADUQAABD
EAAASxAAAFIQAABTEAAAdBAAAPbs4tjO2MTYxNjE2M7E2MS6xNjO2K2j7KPso+yjlol7iWpbAAAA
HBVo6hJnABZoiyZhAE9KAABRSgAAXkoAAHRIAAAAIBVo6hJnABZoiyZhAE9KAABRSgAAXkoAAG1I
CQRzSAkEABoWaBR8agBPSgAAUUoAAF5KAABtSAkEc0gJBAAYFWjqEmcAFmiLJmEAT0oAAFFKAABe
SgAAABgVaOoSZwAWaBlOsgBPSgAAUUoAAF5KAAAAEhZoGU6yAE9KAABRSgAAXkoAAAAYFWjqEmcA
FmjMclwAT0oAAFFKAABeSgAAABIWaKBRgwBPSgAAUUoAAF5KAAAAEhZosCMOAE9KAABRSgAAXkoA
AAASFmgUfGoAT0oAAFFKAABeSgAAABIWaMxyXABPSgAAUUoAAF5KAAAAEhZoGn1tAE9KAABRSgAA
XkoAAAASFmjHM0AAT0oAAFFKAABeSgAAABIWaHkjrwBPSgAAUUoAAF5KAAAjdBAAAHkQAACIEAAA
jhAAAPoQAAD8EAAAqREAALMRAADNEQAA2xEAANwRAAApEgAAKhIAAF4SAABhEgAAZxIAAGoSAACt
EgAA1RIAANYSAADwEgAAOhMAAFYTAAB4EwAAeRMAAMUTAADGEwAA1RMAANcTAADYEwAAqhQAAK0U
AACuFAAA6xQAAPgUAABUFQAAWBUAAGkVAABvFQAA9OX05dnMwsy4rrikuJq4mriQhpC4mriuuIa4
pLh5b3limmKaYpoAABgVaOoSZwAWaBcFkQBPSgAAUUoAAF5KAAAAEhZokmqOAE9KAABRSgAAXkoA
AAAYFWjqEmcAFmiSao4AT0oAAFFKAABeSgAAABIWaHkjrwBPSgAAUUoAAF5KAAAAEhZoxzNAAE9K
AABRSgAAXkoAAAASFmgXBZEAT0oAAFFKAABeSgAAABIWaJ5tLwBPSgAAUUoAAF5KAAAAEhZoRlgK
AE9KAABRSgAAXkoAAAASFmj9L98AT0oAAFFKAABeSgAAABIWaPg7GQBPSgAAUUoAAF5KAAAAGBVo
6hJnABZoiyZhAE9KAABRSgAAXkoAAAAWFmhNSSEAT0oAAFFKAABeSgAAdEgAAAAcFWjqEmcAFmiL
JmEAT0oAAFFKAABeSgAAdEgAAAAWFmj4OxkAT0oAAFFKAABeSgAAdEgAACZvFQAAgRUAAIQVAACb
FQAAqBUAAAEWAABRFgAAVBYAAHEWAAB7FgAAixYAAJQWAADqFgAABhcAAAcXAAAKFwAAbBcAAG4X
AACwFwAAuBcAAOsXAAA4GAAAORgAAEYYAABIGAAASRgAAFEYAABSGAAAZRgAALMYAAC+GAAAzRgA
AM8YAADeGAAA3xgAAOIYAAA2GQAANxkAADgZAAA5GQAAOhkAAEMZAABPGQAAWBkAALUZAAA7GgAA
1hoAAB4bAADz6fPf89/p39Xf1d/Vy9Xf1d/L377pvum+6b60vrS+6bS+tL60qrSglqCqoIyC6QAA
AAAAAAAAAAAAAAAAAAAAAAAAABIWaKcTigBPSgAAUUoAAF5KAAAAEhZo+RH2AE9KAABRSgAAXkoA
AAASFmgzLYIAT0oAAFFKAABeSgAAABIWaDgKfABPSgAAUUoAAF5KAAAAEhZoLkydAE9KAABRSgAA
XkoAAAASFmhyQB0AT0oAAFFKAABeSgAAABgVaOoSZwAWaHJAHQBPSgAAUUoAAF5KAAAAEhZosCMO
AE9KAABRSgAAXkoAAAASFmixRXEAT0oAAFFKAABeSgAAABIWaBcFkQBPSgAAUUoAAF5KAAAAEhZo
eSOvAE9KAABRSgAAXkoAAAAYFWjqEmcAFmgXBZEAT0oAAFFKAABeSgAALx4bAAAlGwAAJhsAACgb
AAAvGwAAMBsAAFAbAACMGwAAlhsAAJ0bAACnGwAAqBsAALAbAAD7GwAAFBwAAFIcAAClHAAAqxwA
AOIcAADzHAAACh0AACQdAAA4HQAAOR0AAE8dAABUHQAAmh0AALEdAAD+HQAAAB4AAAEeAAAFHgAA
Ex4AABQeAAAVHgAAGB4AACAeAAAqHgAAOB4AAEQeAACDHgAA9uzi2M7YxLr2usS6xLDEpvamnKaS
iJJ7znuIcWec9mf2Z/Zn9mf2ZwAAEhZoQGm3AE9KAABRSgAAXkoAAAASFmhSChoAT0oAAFFKAABe
SgAAABgVaOoSZwAWaHJAHQBPSgAAUUoAAF5KAAAAEhZoLkydAE9KAABRSgAAXkoAAAASFminE4oA
T0oAAFFKAABeSgAAABIWaC8lVQBPSgAAUUoAAF5KAAAAEhZoU1GtAE9KAABRSgAAXkoAAAASFmjP
Xj0AT0oAAFFKAABeSgAAABIWaMdkpgBPSgAAUUoAAF5KAAAAEhZockAdAE9KAABRSgAAXkoAAAAS
Fmg4CnwAT0oAAFFKAABeSgAAABIWaDMtggBPSgAAUUoAAF5KAAAAEhZoeSOvAE9KAABRSgAAXkoA
AAASFmiwIw4AT0oAAFFKAABeSgAAABIWaBR8agBPSgAAUUoAAF5KAAAoCh0AAAEeAADLHgAAvx8A
AMsfAAA7IAAAhCIAAO8jAABFJAAAUiQAAFElAAAEKAAAVCkAAGQpAAD6KgAAGSwAAPAsAAD4LAAA
zS0AANcuAABEMAAApTEAALIxAADRMgAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAA
AAAAAAAA9QAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAA
APAAAAAAAAAAAAAAAADrAAAAAAAAAAAAAAAA5gAAAAAAAAAAAAAAAOEAAAAAAAAAAAAAAADhAAAA
AAAAAAAAAAAA6wAAAAAAAAAAAAAAANwAAAAAAAAAAAAAAADXAAAAAAAAAAAAAAAA3AAAAAAAAAAA
AAAAANIAAAAAAAAAAAAAAADNAAAAAAAAAAAAAAAAzQAAAAAAAAAAAAAAAM0AAAAAAAAAAAAAAADN
AAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAAAAAEAwBnZHJAHQAABAAA
Z2T5EfYAAAQDAGdk+RH2AAAEAABnZAdbCgAABAAAZ2S1TGwAAAQAAGdkKx78AAAEAABnZFIKGgAA
BAMAZ2S1TGwAAAQAAGdkpne5AAAEAwBnZKZ3uQAABAAAZ2RyQB0AABeDHgAAjx4AAMseAAD1HgAA
+B4AAFkfAABiHwAAYx8AAJ8fAACpHwAAvh8AAL8fAADLHwAAgyAAAI0gAACdIAAApyAAAOsgAAA+
IQAA6CEAAP4hAAAJIgAAKyIAADAiAAA3IgAAOiIAAHgiAACBIgAAgiIAAIMiAAD27OLY4s7YzsTO
t6qbj5uDm3ebj5trX5trU19rmwAAAAAAAAAAAAAAAAAAAAAAFhZoCDZlAE9KAABRSgAAXkoAAHRI
AAAAFhZoFHxqAE9KAABRSgAAXkoAAHRIAAAAFhZopne5AE9KAABRSgAAXkoAAHRIAAAAFhZoqWdV
AE9KAABRSgAAXkoAAHRIAAAAFhZoTUkhAE9KAABRSgAAXkoAAHRIAAAAFhZoLyVVAE9KAABRSgAA
XkoAAHRIAAAAHBVo6hJnABZopne5AE9KAABRSgAAXkoAAHRIAAAAGBVo6hJnABZopne5AE9KAABR
SgAAXkoAAAAYFWjqEmcAFmgafW0AT0oAAFFKAABeSgAAABIWaMdkpgBPSgAAUUoAAF5KAAAAEhZo
LkydAE9KAABRSgAAXkoAAAASFmjyUAoAT0oAAFFKAABeSgAAABIWaBp9bQBPSgAAUUoAAF5KAAAA
EhZoQGm3AE9KAABRSgAAXkoAAAASFmgUfGoAT0oAAFFKAABeSgAAHYMiAADWIgAA2CIAANkiAACr
IwAArCMAALEjAAC3IwAA7iMAAO8jAABEJAAARSQAAFIkAABWJAAAYCQAAJckAAC0JAAAtSQAAM0k
AADOJAAAzyQAANIkAADqJAAABSUAAA8lAAAYJQAAUCUAAFElAABVJQAAYyUAAGglAABtJQAAcSUA
AIIlAACaJQAAmyUAAJwlAACeJQAAoCUAAOYlAADoJQAA7CUAAO8lAAD8JQAA/SUAAAgmAAAPJgAA
HCYAAB0mAAD05fTl2eXZ5c3BsqSemJ6SmJKMkpiSmJKYkpiSjIaSmIaemJ6GmJ6AhoCeep6SnnoK
FmjHZKYAdEgAAAAKFmgrHvwAdEgAAAAKFmiPWBoAdEgAAAAKFmjyUAoAdEgAAAAKFmjMK9EAdEgA
AAAKFmhkYPUAdEgAAAAKFmhSChoAdEgAAAAaFmhSChoAT0oAAFFKAABeSgAAbUgJBHNICQQAHBVo
6hJnABZoLyVVAE9KAABRSgAAXkoAAHRIAAAAFhZoLyVVAE9KAABRSgAAXkoAAHRIAAAAFhZopne5
AE9KAABRSgAAXkoAAHRIAAAAFhZox2SmAE9KAABRSgAAXkoAAHRIAAAAHBVo6hJnABZopne5AE9K
AABRSgAAXkoAAHRIAAAAFhZo4yUFAE9KAABRSgAAXkoAAHRIAAAwHSYAADEmAAA7JgAASCYAAEsm
AACvJgAAvyYAAMomAADPJgAA9yYAAAQnAAAoJwAAOScAADonAABMJwAAZCcAAGcnAACCJwAAgycA
AIQnAAC5JwAAuicAAMInAADZJwAA3ycAAOEnAADrJwAA8ycAAPknAAAAKAAAASgAAAMoAAAEKAAA
BygAABAoAAAYKAAAISgAAC8oAAA5KAAAOigAAD8oAABXKAAAuigAAL0oAADEKAAAzSgAANkoAADs
KAAA7SgAAP8oAAAYKQAAGikAACcpAABTKQAAVCkAAFgpAABjKQAAZCkAAPr0+u7o4tzi7tbu1uLQ
9ND0yvTK4sTQxNDW4tD00NbE1sTWytb61sTW0PTK9Mr0yvT69Pr0u6qcqgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAGhZoaFJbAE9KAABRSgAAXkoAAG1ICQRzSAkEACAVaOoSZwAWaLVMbABPSgAAUUoA
AF5KAABtSAkEc0gJBAAQFWhSChoAFmhSChoAdEgAAAAKFmgrHvwAdEgAAAAKFmgvJVUAdEgAAAAK
FmhkYPUAdEgAAAAKFmhSChoAdEgAAAAKFmjMK9EAdEgAAAAKFmiPWBoAdEgAAAAKFmgUfGoAdEgA
AAAKFmjyUAoAdEgAAAAKFmgINmUAdEgAAAAKFmiMP6QAdEgAADlkKQAAwCkAAMUpAADKKQAAyykA
ANgpAAD8KQAABCoAAAsqAAAVKgAAICoAAD4qAABJKgAASioAAE0qAABVKgAAWyoAAGwqAAB0KgAA
gioAAIMqAAC2KgAA+SoAAPoqAAAHKwAAKisAAEUrAABIKwAASSsAAEorAABLKwAATCsAAE0rAABO
KwAAXSsAAH4rAACNKwAAkisAAJUrAAC5KwAAvSsAAL4rAADCKwAAyysAABYsAAAZLAAAGiwAAPPp
39Xf89/z3/PL1cvzy8Hzt8u3862jlozLgst4y3jLeMuWjJaMlniWjJaMlt8AAAAAAAASFmilbcQA
T0oAAFFKAABeSgAAABIWaGhSWwBPSgAAUUoAAF5KAAAAEhZoB1sKAE9KAABRSgAAXkoAAAAYFWjq
EmcAFmgHWwoAT0oAAFFKAABeSgAAABIWaLVMbABPSgAAUUoAAF5KAAAAEhZokhdnAE9KAABRSgAA
XkoAAAASFmhVHx0AT0oAAFFKAABeSgAAABIWaMdkpgBPSgAAUUoAAF5KAAAAEhZoFHxqAE9KAABR
SgAAXkoAAAASFmgvJVUAT0oAAFFKAABeSgAAABIWaAg2ZQBPSgAAUUoAAF5KAAAAEhZockAdAE9K
AABRSgAAXkoAAAAYFWjqEmcAFmi1TGwAT0oAAFFKAABeSgAALhosAAAbLAAAKiwAACwsAAA6LAAA
SSwAAFEsAABSLAAAfCwAAIUsAACXLAAAmCwAAMUsAADOLAAA7iwAAO8sAADwLAAA+CwAAKMtAACy
LQAAzC0AACEuAAAwLgAAdC4AAHUuAACJLgAAiy4AANUuAADWLgAAJS8AACcvAABYLwAAYi8AAN0v
AADmLwAA5y8AALEwAADsMAAA8zAAAP8wAAAPMQAAFjEAACYxAAA8MQAAVDEAAPbs4tjszuzYxNjO
2MTYzremmfaZj4WPhY/Oj5mPhY/Oj86Fj5mPmXv2e3F7AAASFmjHesYAT0oAAFFKAABeSgAAABIW
aK94iwBPSgAAUUoAAF5KAAAAEhZokmqOAE9KAABRSgAAXkoAAAASFmj5EfYAT0oAAFFKAABeSgAA
ABgVaOoSZwAWaPkR9gBPSgAAUUoAAF5KAAAAIBVo6hJnABZo+RH2AE9KAABRSgAAXkoAAG1ICQRz
SAkEABgVaOoSZwAWaAdbCgBPSgAAUUoAAF5KAAAAEhZo4idWAE9KAABRSgAAXkoAAAASFmgHWwoA
T0oAAFFKAABeSgAAABIWaCFYdQBPSgAAUUoAAF5KAAAAEhZoaFJbAE9KAABRSgAAXkoAAAASFmgI
NmUAT0oAAFFKAABeSgAAABIWaLZSXQBPSgAAUUoAAF5KAAAsVDEAAFcxAABcMQAAbzEAAHQxAAB6
MQAAmjEAAKQxAAClMQAAsTEAAB4yAAAkMgAAQDIAAFsyAABrMgAAbDIAALAyAACxMgAAsjIAAL0y
AADRMgAAGzMAAC0zAAAuMwAAMDMAADgzAADjMwAA5zMAADA0AAC3NAAAGDUAAB01AABJNQAAUjUA
AFU1AABzNQAAjjUAAJM1AACYNQAAnDUAAJ01AACmNQAAqzUAAPbs3+zV39XfxLett/a3rbett623
rbett623rbejt/att5mM9oyC9ox1axIWaLZSXQBPSgAAUUoAAF5KAAAAGBVo6hJnABZotlJdAE9K
AABRSgAAXkoAAAASFmjHZKYAT0oAAFFKAABeSgAAABgVaOoSZwAWaAUfjABPSgAAUUoAAF5KAAAA
EhZoBR+MAE9KAABRSgAAXkoAAAASFmh7TFsAT0oAAFFKAABeSgAAABIWaHJAHQBPSgAAUUoAAF5K
AAAAGBVo6hJnABZockAdAE9KAABRSgAAXkoAAAAgFWjqEmcAFmhyQB0AT0oAAFFKAABeSgAAbUgJ
BHNICQQAEhZo+RH2AE9KAABRSgAAXkoAAAAYFWjqEmcAFmj5EfYAT0oAAFFKAABeSgAAABIWaK94
iwBPSgAAUUoAAF5KAAAAEhZoB1sKAE9KAABRSgAAXkoAACrRMgAAuDQAAEA2AAC7NgAA/TcAAB45
AACWOgAAUDsAAFk7AABvPAAAuzwAAKU+AAA9QAAAQ0AAABFBAAAfRAAACUYAABlGAAD9RgAAtEgA
AHBJAACJSQAAJUwAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAA
AAAAAAAAAADxAAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAADsAAAAAAAAAAAA
AAAA5wAAAAAAAAAAAAAAAOcAAAAAAAAAAAAAAADnAAAAAAAAAAAAAAAA4gAAAAAAAAAAAAAAAN0A
AAAAAAAAAAAAAADnAAAAAAAAAAAAAAAA2AAAAAAAAAAAAAAAANMAAAAAAAAAAAAAAADdAAAAAAAA
AAAAAAAAzgAAAAAAAAAAAAAAAM4AAAAAAAAAAAAAAADOAAAAAAAAAAAAAAAAyQAAAAAAAAAAAAAA
AMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABnZBIOJgAABAMAZ2QSDiYAAAQAAGdkD1Pp
AAAEAABnZAprcQAABAAAZ2Q8EhsAAAQDAGdkD1PpAAAEAABnZLFSSAAABAAAZ2SCP4kAAAQDAGdk
gj+JAAAIAAANxgUAAcQfAGdkckAdAAAEAABnZHJAHQAAFqs1AACsNQAArTUAALY1AAC6NQAA0DUA
ANU1AADsNQAA9TUAAAs2AAAqNgAAPTYAAD82AABCNgAARDYAAE82AABQNgAAfjYAAIY2AACJNgAA
ujYAALs2AADiNgAA4zYAAO82AAD0NgAA/zYAAAE3AAAbNwAAHjcAACo3AAAzNwAARjcAAEc3AABK
NwAAVzcAAF03AABeNwAAbjcAAG83AAB1NwAAeTcAAH43AACNNwAAmzcAAJ83AACgNwAApjcAAKc3
AACsNwAAsTcAAMk3AAD26fbf9tXpy+nV6dXLwcu3raDLoLeWjKCCoIKggqCCoIKglqCWoMugy4yg
goyCoIygjJYAEhZockAdAE9KAABRSgAAXkoAAAASFmiQWv0AT0oAAFFKAABeSgAAABIWaPQ/CwBP
SgAAUUoAAF5KAAAAGBVo6hJnABZockAdAE9KAABRSgAAXkoAAAASFmiSao4AT0oAAFFKAABeSgAA
ABIWaC88aQBPSgAAUUoAAF5KAAAAEhZoe0xbAE9KAABRSgAAXkoAAAASFmjIQlsAT0oAAFFKAABe
SgAAABIWaAUfjABPSgAAUUoAAF5KAAAAEhZotlJdAE9KAABRSgAAXkoAAAAYFWjqEmcAFmgFH4wA
T0oAAFFKAABeSgAAABIWaAdbCgBPSgAAUUoAAF5KAAAzyTcAANg3AADZNwAA6jcAAPo3AAD8NwAA
/TcAAAE4AACgOAAAqzgAALY4AADQOAAA4TgAAAg5AAAMOQAAHTkAAEo5AABLOQAAUzkAAFQ5AABm
OQAAfjkAAOo5AADrOQAA/DkAAAk6AAAiOgAAMDoAAEg6AABWOgAAVzoAAGE6AABvOgAAhzoAAJI6
AACWOgAArToAALE6AAC7OgAA1joAAOY6AAD4OgAABzsAAAg7AAAOOwAAETsAACQ7AAAvOwAAODsA
AEg7AABQOwAAWTsAAHE7AAB/OwAAvTsAAPbs39Xs38vswey39uyt7N+j36Pf7N/s3+zf7N/s9uz2
7Pbs3+zf7N/srezf7N/s363flY+JjwoWaAlTEAB0SAAAAAoWaJJqjgB0SAAAABoWaII/iQBPSgAA
UUoAAF5KAABtSAkEc0gJBAASFmhpDBwAT0oAAFFKAABeSgAAABIWaMhCWwBPSgAAUUoAAF5KAAAA
EhZoBR+MAE9KAABRSgAAXkoAAAASFmgvPGkAT0oAAFFKAABeSgAAABIWaPQ/CwBPSgAAUUoAAF5K
AAAAEhZoe0xbAE9KAABRSgAAXkoAAAAYFWjqEmcAFmhyQB0AT0oAAFFKAABeSgAAABIWaHJAHQBP
SgAAUUoAAF5KAAAAEhZokFr9AE9KAABRSgAAXkoAADa9OwAAxDsAAMc7AADIOwAA7DsAAO07AAAH
PAAACDwAABY8AAAgPAAALDwAAEE8AABGPAAASjwAAE48AABPPAAAUDwAAFQ8AABePAAAbDwAAG48
AADOPAAA9TwAAP89AAAVPgAAFj4AAB8+AAAsPgAARz4AAFU+AABhPgAAaz4AAHI+AACkPgAApT4A
ADxAAAA9QAAAQ0AAAHNAAACGQAAAsEAAALtAAADFQAAAzUAAABBBAAARQQAAf0MAAIBDAACHQwAA
iUMAAJhDAACgQwAAoUMAAKJDAAC1QwAAzUMAANVDAAD69Pr07vTu9Pr06O7o9OL07vTi9Oji6Prc
1tz03PTc9Nzo0OLMwui80Lbo0Lyw0LDQsKOZo5mjmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAASFmg8
EhsAT0oAAFFKAABeSgAAABgVaOoSZwAWaDwSGwBPSgAAUUoAAF5KAAAAChZoPBIbAHRIAAAAChZo
e0xbAHRIAAAAChZoAiy2AHRIAAAAEhZogj+JAE9KAABRSgAAXkoAAAAGFmgPU+kAAAoWaLFSSAB0
SAAAAAoWaLZSXQB0SAAAAAoWaCQtDAB0SAAAAAoWaPQ/CwB0SAAAAAoWaII/iQB0SAAAAAoWaOk1
5AB0SAAAAAoWaJJqjgB0SAAAAAoWaAlTEAB0SAAAONVDAADYQwAA50MAAPBDAAAdRAAAH0QAAD1E
AAA+RAAAQkQAAFZEAACZRAAAm0QAAPVEAAD3RAAAD0UAABZFAAAfRQAAIUUAAC5FAABBRQAATUUA
AFJFAABTRQAAW0UAAFxFAABsRQAAeEUAAHlFAACLRQAAjkUAAI9FAACfRQAArkUAAK9FAADORQAA
z0UAANhFAADeRQAA4EUAAOFFAADkRQAACEYAAAlGAAAZRgAAO0YAAEVGAABaRgAAbUYAAHdGAACI
RgAAikYAAJdGAACZRgAA/UYAADtHAAA8RwAAR0cAAPbp9unf2dPZzdnT2dPNx83ZzdnN2c3ZzdnN
vs2407iy082szazN2azZo5uVj5WPuI+4j5WPlbiVAAAKFmhgQC4AdEgAAAAKFmgPU+kAdEgAAAAO
FmgPU+kAbUgJBHNICQQAEBVoEXf3ABZogj+JAHRIAAAAChZotn6sAHRIAAAAChZoESZlAHRIAAAA
ChZosVJIAHRIAAAAEBVoCmtxABZoCmtxAHRIAAAAChZopAdNAHRIAAAAChZoCmtxAHRIAAAAChZo
JVS4AHRIAAAAChZoAiy2AHRIAAAAEhZoPBIbAE9KAABRSgAAXkoAAAAYFWjqEmcAFmg8EhsAT0oA
AFFKAABeSgAAABIWaLFSSABPSgAAUUoAAF5KAAA4R0cAAEpHAABRRwAAVEcAAJ9HAACiRwAA1UcA
AONHAADoRwAAS0gAAHxIAACESAAAh0gAAIhIAACPSAAAmkgAAJ1IAACeSAAAokgAALNIAAC0SAAA
Z0kAAG1JAABwSQAAiUkAAC5KAAA9SgAAWUoAAF5KAACTSgAAqkoAAKtKAAC5SgAAyUoAAMxKAADR
SgAA0koAAN1KAAAdSwAAIksAAChLAAArSwAALEsAAC5LAAAvSwAAPEsAAFxLAABmSwAAZ0sAAGhL
AAB2SwAAd0sAAHhLAACDSwAAkksAAKNLAAC5SwAA2UsAAANMAAAiTAAAI0wAACRMAAAlTAAA+vT6
9Pr0+u767vru+u767vru+vT67vrg1MjUyNTI1Mi8yNSw1LDUsNSw1LDUsNTI1LDIsNSwyKSwpLDU
sNQAAAAAAAAAAAAAAAAAABYWaLZ+rABPSgAAUUoAAF5KAAB0SAAAABYWaFxBygBPSgAAUUoAAF5K
AAB0SAAAABYWaJBa/QBPSgAAUUoAAF5KAAB0SAAAABYWaII/iQBPSgAAUUoAAF5KAAB0SAAAABYW
aBIOJgBPSgAAUUoAAF5KAAB0SAAAABoWaBIOJgBPSgAAUUoAAF5KAABtSAkEc0gJBAAKFmixUkgA
dEgAAAAKFmgPU+kAdEgAAAAKFmhgQC4AdEgAAD4lTAAAXUwAAF5MAAB0TAAAr0wAALFMAACyTAAA
8UwAADZNAAA4TQAAOU0AAEdNAABVTQAAWU0AAHdNAACgTQAAok0AALJNAADwTQAACk4AABJOAAAT
TgAAFE4AAExOAABfTgAAZU4AAHBOAAB1TgAAgk4AAK5OAACwTgAAu04AAL5OAAD06PTc9NDGvMa8
r6Wvpa+br5uvka+HeGx40HhseGBUYAAAAAAWFmi2fqwAT0oAAFFKAABeSgAAdEgAAAAWFmjve+sA
T0oAAFFKAABeSgAAdEgAAAAWFmhcQcoAT0oAAFFKAABeSgAAdEgAAAAcFWjqEmcAFmhMGQQAT0oA
AFFKAABeSgAAdEgAAAASFmisJcAAT0oAAFFKAABeSgAAABIWaLZ+rABPSgAAUUoAAF5KAAAAEhZo
+0a3AE9KAABRSgAAXkoAAAASFmjve+sAT0oAAFFKAABeSgAAABgVaOoSZwAWaFUfHQBPSgAAUUoA
AF5KAAAAEhZogj+JAE9KAABRSgAAXkoAAAASFmhcQcoAT0oAAFFKAABeSgAAABYWaPtGtwBPSgAA
UUoAAF5KAAB0SAAAABYWaII/iQBPSgAAUUoAAF5KAAB0SAAAABYWaKwlwABPSgAAUUoAAF5KAAB0
SAAAABYWaFUfHQBPSgAAUUoAAF5KAAB0SAAAIL5OAADSTgAA404AAOVOAADmTgAA704AABpPAAAb
TwAAHE8AACJPAAAjTwAAJE8AACpPAACATwAAjU8AAJ1PAAAAUAAAQFAAAEJQAABWUAAAZlAAAHBQ
AAB4UAAAgFAAAKBQAADmUAAA+FAAAPpQAAAQUQAA8eXx2c2+rKC+oL7NlIiUiJR8lHyUcIhwlGTx
VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBVo6hJnABZojkwvAE9KAABRSgAAXkoAAHRIAAAA
FhZogj+JAE9KAABRSgAAXkoAAHRIAAAAFhZoZkSwAE9KAABRSgAAXkoAAHRIAAAAFhZotn6sAE9K
AABRSgAAXkoAAHRIAAAAFhZouU0mAE9KAABRSgAAXkoAAHRIAAAAFhZoZUKTAE9KAABRSgAAXkoA
AHRIAAAAFhZosCMOAE9KAABRSgAAXkoAAHRIAAAAIxZoDmKwAEIqCkNKEgBPSgMAUUoDAF5KAwBh
ShIAcGgAmpoAHBVoDmKwABZoDmKwAE9KAABRSgAAXkoAAHRIAAAAFhZoDmKwAE9KAABRSgAAXkoA
AHRIAAAAFhZoTBkEAE9KAABRSgAAXkoAAHRIAAAAFhZoXEHKAE9KAABRSgAAXkoAAHRIAAAAHBVo
6hJnABZoTBkEAE9KAABRSgAAXkoAAHRIAAAcJUwAAOZOAAAbTwAAKk8AAOZQAABmUgAAylIAADBT
AABmUwAAcFMAAIVUAACSVAAAulQAAEpVAABTVQAAhVUAACJWAADcVgAAhFgAAPtYAAA3WQAASFkA
AFlZAACmWQAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAA
AAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA8QAAAAAAAAAAAAAAAOwAAAAAAAAAAAAAAADn
AAAAAAAAAAAAAAAA4gAAAAAAAAAAAAAAAOIAAAAAAAAAAAAAAADiAAAAAAAAAAAAAAAA4gAAAAAA
AAAAAAAAAN0AAAAAAAAAAAAAAADiAAAAAAAAAAAAAAAA4gAAAAAAAAAAAAAAANgAAAAAAAAAAAAA
AADYAAAAAAAAAAAAAAAA0wAAAAAAAAAAAAAAAM4AAAAAAAAAAAAAAADJAAAAAAAAAAAAAAAAyQAA
AAAAAAAAAAAAAMkAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAGdkBiVGAAAEAABnZPF6/QAABAAAZ2Rw
LC8AAAQAAGdk6hJnAAAEAwBnZJtiPQAABAAAZ2SbYj0AAAQDAGdkmzsPAAAEAABnZLlNJgAACAAA
EYQAAGCEAABnZEwZBAAABAAAZ2SbZvEAABcQUQAAGFEAAFJRAABmUQAAaFEAAJJRAAC4UQAAwFEA
ANpRAADeUQAA4FEAAAxSAAAOUgAAklIAAJpSAADKUgAA/lIAACxTAAAuUwAAMFMAADRTAAA2UwAA
OFMAAEJTAABEUwAASFMAAFJTAABWUwAAYlMAAGRTAADx4tbK4r7ivuKv4qPi8eKvlIV24mdbZ8pM
Z1tnWwAAABwVaOoSZwAWaLZ+rABPSgAAUUoAAF5KAAB0SAAAABYWaLlNJgBPSgAAUUoAAF5KAAB0
SAAAABwVaOoSZwAWaLlNJgBPSgAAUUoAAF5KAAB0SAAAABwVaOoSZwAWaIoFcwBPSgAAUUoAAF5K
AAB0SAAAABwVaOoSZwAWaBFkmQBPSgAAUUoAAF5KAAB0SAAAABwVaOoSZwAWaJs7DwBPSgAAUUoA
AF5KAAB0SAAAABYWaO976wBPSgAAUUoAAF5KAAB0SAAAABwVaOoSZwAWaEwZBABPSgAAUUoAAF5K
AAB0SAAAABYWaPtGtwBPSgAAUUoAAF5KAAB0SAAAABYWaLZ+rABPSgAAUUoAAF5KAAB0SAAAABYW
aHQqgQBPSgAAUUoAAF5KAAB0SAAAABwVaOoSZwAWaI5MLwBPSgAAUUoAAF5KAAB0SAAAABwVaOoS
ZwAWaIUuLABPSgAAUUoAAF5KAAB0SAAAHWRTAABmUwAAblMAAHBTAAD0UwAA9lMAAANUAAAEVAAA
NlQAADdUAAA+VAAAP1QAAEZUAABIVAAASlQAAFtUAABdVAAAYVQAAIFUAACEVAAAhVQAAIpUAAC3
VAAAuFQAALlUAAC6VAAAy1QAAM9UAADVVAAAEVUAABZVAAAbVQAASFUAAEpVAADx5NPGvMa8xq/G
vKWvmK+Lr5ivi4GLr8Z3bWBWYG28bWAAAAASFmglVLgAT0oAAFFKAABeSgAAABgVaOoSZwAWaO97
6wBPSgAAUUoAAF5KAAAAEhZo73vrAE9KAABRSgAAXkoAAAASFmj9OiMAT0oAAFFKAABeSgAAABIW
aHN9owBPSgAAUUoAAF5KAAAAGBVo6hJnABZoEWSZAE9KAABRSgAAXkoAAAAYFWjqEmcAFmhMGQQA
T0oAAFFKAABeSgAAABIWaKQHTQBPSgAAUUoAAF5KAAAAGBVo6hJnABZo7m4WAE9KAABRSgAAXkoA
AAASFmi2fqwAT0oAAFFKAABeSgAAABgVaOoSZwAWaP06IwBPSgAAUUoAAF5KAAAAIBVo6hJnABZo
mzsPAE9KAABRSgAAXkoAAG1ICQRzSAkEABgVaOoSZwAWaJs7DwBPSgAAUUoAAF5KAAAAHBVo6hJn
ABZoKC8eAE9KAABRSgAAXkoAAHRIAAAhSlUAAFFVAABSVQAAU1UAAFVVAABWVQAAXFUAAGNVAABk
VQAAcVUAAINVAAD5VQAA+lUAACBWAAAhVgAAIlYAACNWAABiVgAAZFYAAG1WAAB0VgAAdVYAAItW
AAC6VgAA2FYAANtWAADcVgAA51YAAOhWAAD5VgAA/lYAAFBXAABRVwAAW1cAAHZXAADz4tHE87rz
raOt85bzifN/iXWJo4mjiaOJa4lhibqJxInEAAAAAAAAAAAAAAAAAAAAAAAAAAASFmiQWv0AT0oA
AFFKAABeSgAAABIWaIBexgBPSgAAUUoAAF5KAAAAEhZoJVS4AE9KAABRSgAAXkoAAAASFmiIepIA
T0oAAFFKAABeSgAAABgVaOoSZwAWaNMT1gBPSgAAUUoAAF5KAAAAGBVo6hJnABZoJUeyAE9KAABR
SgAAXkoAAAASFmi2fqwAT0oAAFFKAABeSgAAABgVaOoSZwAWaPxEBgBPSgAAUUoAAF5KAAAAEhZo
pAdNAE9KAABRSgAAXkoAAAAYFWjqEmcAFmhrWA0AT0oAAFFKAABeSgAAACAVaOoSZwAWaL9RdwBP
SgAAUUoAAF5KAABtSAkEc0gJBAAgFWjqEmcAFmj8RAYAT0oAAFFKAABeSgAAbUgJBHNICQQAGBVo
6hJnABZov1F3AE9KAABRSgAAXkoAACJ2VwAAfFcAAJpXAACgVwAAv1cAAMhXAADJVwAAzVcAANBX
AADZVwAA/1cAAA1YAAARWAAAF1gAABtYAAArWAAANFgAAFZYAABiWAAAZlgAAGhYAAB9WAAAf1gA
AINYAACEWAAAjFgAAJBYAAC1WAAAt1gAALxYAAC9WAAAvlgAAMBYAADGWAAAx1gAAMtYAADMWAAA
z1gAANBYAADRWAAA0lgAANNYAADVWAAA1lgAANdYAADZWAAA4VgAAOJYAAD4WAAA+lgAAPbp3+nS
6cjfyN++tKrfvt++37SgtN/pk9LIifbIf8h/ifbIqsiqf8iqyKqJqsiqifYAAAAAABIWaMIZvwBP
SgAAUUoAAF5KAAAAEhZo4RITAE9KAABRSgAAXkoAAAAYFWjqEmcAFmi/UXcAT0oAAFFKAABeSgAA
ABIWaBEmZQBPSgAAUUoAAF5KAAAAEhZoc32jAE9KAABRSgAAXkoAAAASFmglVLgAT0oAAFFKAABe
SgAAABIWaNYIFQBPSgAAUUoAAF5KAAAAEhZod24uAE9KAABRSgAAXkoAAAAYFWjqEmcAFmjqEmcA
T0oAAFFKAABeSgAAABIWaMdUrgBPSgAAUUoAAF5KAAAAGBVo6hJnABZo0xPWAE9KAABRSgAAXkoA
AAASFmgCGe0AT0oAAFFKAABeSgAAMfpYAAD7WAAA/FgAAABZAAAGWQAAClkAAA1ZAAAOWQAAFFkA
ABhZAAAaWQAAHVkAACRZAAAoWQAAN1kAAEhZAABKWQAAaFkAAGpZAAB1WQAAdlkAAKZZAACqWQAA
q1kAALBZAACyWQAAtlkAALxZAAC9WQAAylkAANRZAADhWQAA5FkAAOVZAADmWQAABFoAAAZaAAAI
WgAADFoAABxaAAAqWgAAMFoAAEBaAABMWgAAUloAAGRaAABqWgAA9uzi1eLV4tXi1eLV4tXsyOy+
7L7s4rGn4p3ineKd4pOdieKJnX+dp3WxdbF1sRIWaHQOWwBPSgAAUUoAAF5KAAAAEhZoJC0MAE9K
AABRSgAAXkoAAAASFmikB00AT0oAAFFKAABeSgAAABIWaJhtFQBPSgAAUUoAAF5KAAAAEhZod24u
AE9KAABRSgAAXkoAAAASFmglVLgAT0oAAFFKAABeSgAAABgVaOoSZwAWaHQOWwBPSgAAUUoAAF5K
AAAAEhZo4RITAE9KAABRSgAAXkoAAAAYFWjqEmcAFmgGJUYAT0oAAFFKAABeSgAAABgVaOoSZwAW
aPF6/QBPSgAAUUoAAF5KAAAAEhZo8Xr9AE9KAABRSgAAXkoAAAASFmgGJUYAT0oAAFFKAABeSgAA
ABIWaHAsLwBPSgAAUUoAAF5KAAAuplkAAL1ZAAAOWgAAwloAAPhaAAB6WwAAolsAAMRcAAD8XAAA
rl0AANZdAACAXgAA4F4AAB5fAACeXwAA3l8AAEhgAADcYAAAimEAANRhAADqYQAAamIAANBiAAD2
YgAAsmMAADFkAABWZAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA9QAA
AAAAAAAAAAAAAPAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAPAAAAAAAAAA
AAAAAADrAAAAAAAAAAAAAAAA6wAAAAAAAAAAAAAAAOYAAAAAAAAAAAAAAADmAAAAAAAAAAAAAAAA
5gAAAAAAAAAAAAAAAOYAAAAAAAAAAAAAAADmAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAPAAAAAA
AAAAAAAAAADwAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAADwAAAAAAAAAAAA
AAAA5gAAAAAAAAAAAAAAAOYAAAAAAAAAAAAAAADmAAAAAAAAAAAAAAAA5gAAAAAAAAAAAAAAAOYA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABnZJtiPQAABAAAZ2RREyQAAAQAAGdkmxAbAAAE
AABnZENw9gAABAAAZ2R0DlsAABpqWgAAgloAAJJaAACUWgAAlloAAKBaAAC0WgAAuFoAALpaAAC8
WgAAwloAANBaAADeWgAA5FoAAPxaAAD+WgAAAFsAAAJbAAAmWwAANlsAADhbAAA6WwAAQlsAAERb
AABYWwAAXlsAAGBbAABkWwAAZlsAAG5bAABwWwAAclsAAHhbAAB8WwAAflsAAIxbAACSWwAAoFsA
AKJbAACmWwAAsFsAALJbAAC2WwAA1FsAANpbAADqWwAA+lsAAPxbAAD+WwAAElwAABRcAAD27Pbs
9uL27Nj2zsS6rbrYuqCWoJb2iez22LqWuuzY9q26xLqtuq262Lr22PbY9ons9gAAAAAAAAAAAAAA
AAAAAAAAAAAAGBVo8Xr9ABZo8Xr9AE9KAABRSgAAXkoAAAASFmjWCBUAT0oAAFFKAABeSgAAABgV
aOoSZwAWaHQOWwBPSgAAUUoAAF5KAAAAGBVo6hJnABZomxAbAE9KAABRSgAAXkoAAAASFmibEBsA
T0oAAFFKAABeSgAAABIWaCVUuABPSgAAUUoAAF5KAAAAEhZoQ3D2AE9KAABRSgAAXkoAAAASFmgm
DXQAT0oAAFFKAABeSgAAABIWaKQHTQBPSgAAUUoAAF5KAAAAEhZo8Xr9AE9KAABRSgAAXkoAAAAS
Fmh0DlsAT0oAAFFKAABeSgAAMhRcAABGXAAASFwAAEpcAABMXAAATlwAAFBcAABYXAAAXFwAAF5c
AABgXAAAZFwAAGpcAABwXAAAclwAAIBcAACEXAAAilwAAIxcAACSXAAAllwAAJhcAACcXAAAoFwA
AKZcAACsXAAArlwAALJcAAC0XAAAtlwAALxcAAC+XAAAwFwAAMJcAADEXAAAzlwAANJcAADgXAAA
5lwAAPxcAAAEXQAA9uzi9tjsy8HYt9jB2LfLwdjBy9i3y63Lo9ij4pnYt/ajy4yCeK2MawAAAAAA
AAAAAAAYFWjqEmcAFmhDcPYAT0oAAFFKAABeSgAAABIWaCVUuABPSgAAUUoAAF5KAAAAEhZoKEJS
AE9KAABRSgAAXkoAAAAYFWjqEmcAFmiFLiwAT0oAAFFKAABeSgAAABIWaPF6/QBPSgAAUUoAAF5K
AAAAEhZomxAbAE9KAABRSgAAXkoAAAASFmgmDXQAT0oAAFFKAABeSgAAABIWaJ0S0gBPSgAAUUoA
AF5KAAAAEhZowhm/AE9KAABRSgAAXkoAAAAYFWjqEmcAFmibEBsAT0oAAFFKAABeSgAAABIWaBEm
ZQBPSgAAUUoAAF5KAAAAEhZodA5bAE9KAABRSgAAXkoAAAASFmhnYb0AT0oAAFFKAABeSgAAABIW
aAIZ7QBPSgAAUUoAAF5KAAAoBF0AABBdAAASXQAAGF0AABpdAAAcXQAAKF0AACpdAABgXQAAYl0A
AHRdAAB8XQAAfl0AAJJdAACYXQAApF0AAKZdAACoXQAAql0AAK5dAAC8XQAAxl0AAMhdAADSXQAA
1F0AADJeAAA+XgAAgF4AAJBeAACcXgAApF4AALxeAADEXgAAxl4AANpeAADeXgAA9uz23/bf9t/V
3/bIvvbfvtXf9rSqtJiLgbSBd6qBamDIvoEAAAAAAAAAAAAAAAAAEhZoEzbGAE9KAABRSgAAXkoA
AAAYFWjqEmcAFmiIepIAT0oAAFFKAABeSgAAABIWaJsQGwBPSgAAUUoAAF5KAAAAEhZoiHqSAE9K
AABRSgAAXkoAAAAYFWjqEmcAFmhgWZAAT0oAAFFKAABeSgAAACMVaOoSZwAWaGBZkAA1CIFDShwA
T0oAAFFKAABeSgAAYUocABIWaCVUuABPSgAAUUoAAF5KAAAAEhZoURMkAE9KAABRSgAAXkoAAAAS
Fmjxev0AT0oAAFFKAABeSgAAABgVaPF6/QAWaPF6/QBPSgAAUUoAAF5KAAAAEhZodA5bAE9KAABR
SgAAXkoAAAAYFWjqEmcAFmhDcPYAT0oAAFFKAABeSgAAABIWaCYNdABPSgAAUUoAAF5KAAAAEhZo
Q3D2AE9KAABRSgAAXkoAACPeXgAACF8AAApfAAAUXwAAFl8AABxfAAAeXwAALl8AADpfAABCXwAA
bF8AAG5fAABwXwAAeF8AAHpfAAB8XwAAgl8AAIRfAACYXwAAnF8AAMhfAADMXwAAzl8AANBfAADW
XwAA2F8AANpfAADcXwAA3l8AAO5fAAD6XwAAAmAAAChgAAAwYAAAMmAAAEhgAABuYAAAcGAAAHJg
AAB0YAAAfGAAAPbs39Xf7MvB7N+337fft62g1ez237ffltXs9uzLwcuJ9qDVy391f2gAAAAAGBVo
6hJnABZowhm/AE9KAABRSgAAXkoAAAASFmidEtIAT0oAAFFKAABeSgAAABIWaMIZvwBPSgAAUUoA
AF5KAAAAGBVo6hJnABZomxAbAE9KAABRSgAAXkoAAAASFmj4LWwAT0oAAFFKAABeSgAAABgVaPF6
/QAWaPF6/QBPSgAAUUoAAF5KAAAAEhZoEzbGAE9KAABRSgAAXkoAAAASFmjWCBUAT0oAAFFKAABe
SgAAABIWaCVUuABPSgAAUUoAAF5KAAAAEhZomxAbAE9KAABRSgAAXkoAAAASFmjxev0AT0oAAFFK
AABeSgAAABgVaOoSZwAWaIh6kgBPSgAAUUoAAF5KAAAAEhZoiHqSAE9KAABRSgAAXkoAAAASFmiY
bRUAT0oAAFFKAABeSgAAKHxgAACIYAAAimAAAJBgAACSYAAAlGAAAKJgAACuYAAAsGAAALJgAAC4
YAAAumAAAL5gAADCYAAAyGAAANRgAADWYAAA2mAAANxgAADsYAAA+GAAAP5gAAACYQAABGEAABBh
AAASYQAASmEAAExhAABeYQAAcGEAAHJhAACGYQAAiGEAALBhAACyYQAAwGEAAMJhAADEYQAAxmEA
AMhhAADSYQAA1GEAANxhAADeYQAA4GEAAOhhAAD0YQAA9uz23+zf9uz23+zf9t/21fbLwbfBqsGq
warBqsud1cvBy6rVqsuqkMGQhnyQhgAAAAAAAAAAAAAAAAAAEhZo+DsZAE9KAABRSgAAXkoAAAAS
FmgCGe0AT0oAAFFKAABeSgAAABgVaOoSZwAWaGBZkABPSgAAUUoAAF5KAAAAGBVo8Xr9ABZo8Xr9
AE9KAABRSgAAXkoAAAAYFWjqEmcAFmibEBsAT0oAAFFKAABeSgAAABIWaCVUuABPSgAAUUoAAF5K
AAAAEhZomxAbAE9KAABRSgAAXkoAAAASFmiYbRUAT0oAAFFKAABeSgAAABIWaPF6/QBPSgAAUUoA
AF5KAAAAGBVo6hJnABZowhm/AE9KAABRSgAAXkoAAAASFmidEtIAT0oAAFFKAABeSgAAABIWaMIZ
vwBPSgAAUUoAAF5KAAAu9GEAAP5hAAAAYgAAAmIAABZiAAAaYgAAMmIAAEJiAABQYgAAVGIAAGhi
AABuYgAAdGIAAHhiAACMYgAAjmIAAJJiAACWYgAArmIAALJiAADEYgAAxmIAAMhiAADMYgAAzmIA
APTn2tDG0LyyvNClm8aRhHfG0G3QYFN3RgAAAAAAAAAAAAAAAAAAAAAYFWjqEmcAFmjTE9YAT0oA
AFFKAABeSgAAABgVaOoSZwAWaMAjWABPSgAAUUoAAF5KAAAAGBVo6hJnABZorwIYAE9KAABRSgAA
XkoAAAASFmgzaYYAT0oAAFFKAABeSgAAABgVaOoSZwAWaGBZkABPSgAAUUoAAF5KAAAAGBVo6hJn
ABZoKT7ZAE9KAABRSgAAXkoAAAASFmglVLgAT0oAAFFKAABeSgAAABIWaAIZ7QBPSgAAUUoAAF5K
AAAAGBVo6hJnABZoDB35AE9KAABRSgAAXkoAAAASFmgRJmUAT0oAAFFKAABeSgAAABIWaHduLgBP
SgAAUUoAAF5KAAAAEhZotn6sAE9KAABRSgAAXkoAAAASFmhREyQAT0oAAFFKAABeSgAAABgVaOoS
ZwAWaPF8XwBPSgAAUUoAAF5KAAAAGBVo6hJnABZoL3vRAE9KAABRSgAAXkoAAAAVFmgCGe0ANQiB
T0oAAFFKAABeSgAAABjOYgAA0GIAAPJiAAD0YgAAAmMAAAZjAAASYwAAFmMAABhjAAAyYwAANGMA
ADxjAABAYwAASmMAAExjAABSYwAAsGMAAL5jAADCYwAAzGMAAM5jAADSYwAA5mMAAOhjAADuYwAA
8mMAAAtkAAAPZAAAMGQAADdkAAA+ZAAAVWQAAFZkAABYZAAAWWQAAM1kAADz5tzm0si+tNKqnaqd
kOaGfObI5r7Sb6qdqpCGfJC+ZVuGWwAAABIWaCYNdABPSgAAUUoAAF5KAAAAEhZo0xPWAE9KAABR
SgAAXkoAAAAYFWgTNsYAFmgTNsYAT0oAAFFKAABeSgAAABIWaNgYcQBPSgAAUUoAAF5KAAAAEhZo
8Xr9AE9KAABRSgAAXkoAAAAYFWjqEmcAFmjlRucAT0oAAFFKAABeSgAAABgVaOoSZwAWaBM2xgBP
SgAAUUoAAF5KAAAAEhZoEzbGAE9KAABRSgAAXkoAAAASFmiYbRUAT0oAAFFKAABeSgAAABIWaDNp
hgBPSgAAUUoAAF5KAAAAEhZoZUKTAE9KAABRSgAAXkoAAAASFmhREyQAT0oAAFFKAABeSgAAABIW
aNhdWgBPSgAAUUoAAF5KAAAAGBVo6hJnABZo0xPWAE9KAABRSgAAXkoAAAAYFWjqEmcAFmi/UXcA
T0oAAFFKAABeSgAAI81kAADYZAAA22QAANxkAADfZAAA4GQAAP1kAAD+ZAAAAmUAAAllAAAKZQAA
DGUAAA1lAABKZQAAUGUAAFFlAABcZQAAXmUAAGBlAACCZQAAg2UAAIVlAACGZQAAjmUAAABmAAAG
ZgAAHGYAACBmAAAmZgAAKGYAADpmAABAZgAARGYAAEZmAABKZgAAXGYAAF5mAABiZgAAcmYAAHxm
AACCZgAAhmYAAIhmAACMZgAAkmYAAJRmAACgZgAA9uzi7OLs9uz27OLs1cviy+L24tW+tL6qoL6q
lqC+jKqWqoKWvtW+dYKqlnW0lhgVaOoSZwAWaLMT6gBPSgAAUUoAAF5KAAAAEhZoPgsCAE9KAABR
SgAAXkoAAAASFmh0e7gAT0oAAFFKAABeSgAAABIWaNhdWgBPSgAAUUoAAF5KAAAAEhZoLmh4AE9K
AABRSgAAXkoAAAASFmhcQYcAT0oAAFFKAABeSgAAABIWaH0xugBPSgAAUUoAAF5KAAAAGBVo6hJn
ABZoaEAUAE9KAABRSgAAXkoAAAASFmhREyQAT0oAAFFKAABeSgAAABgVaOoSZwAWaOVG5wBPSgAA
UUoAAF5KAAAAEhZox1SuAE9KAABRSgAAXkoAAAASFmgmDXQAT0oAAFFKAABeSgAAABIWaDNphgBP
SgAAUUoAAF5KAAAuVmQAAA1lAACDZQAATGYAAI5mAAAYZwAAZGcAAO5nAAAyaAAABmkAANBpAACU
agAAvGoAACprAABqawAA/GsAAD5sAAAQbQAANG0AAIptAACrbgAABG8AAKZvAAC3bwAAVHAAAJZx
AAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAA
AAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPUAAAAAAAAA
AAAAAAD6AAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA
8AAAAAAAAAAAAAAAAOsAAAAAAAAAAAAAAADrAAAAAAAAAAAAAAAA6wAAAAAAAAAAAAAAAOsAAAAA
AAAAAAAAAADrAAAAAAAAAAAAAAAA5gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAA
AAAA+gAAAAAAAAAAAAAAAOEAAAAAAAAAAAAAAADhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAQAAGdksQ9vAAAEAABnZNFWxAAABAAAZ2TkbrQAAAQAAGdkXEGHAAAEAABnZC5oeAAA
BAAAZ2SbYj0AABmgZgAApGYAAKhmAACsZgAArmYAALBmAADEZgAAyGYAAM5mAADQZgAA4mYAAOZm
AADqZgAA8GYAAPJmAAAEZwAADGcAABBnAAASZwAAFGcAABZnAAAoZwAAKmcAAEBnAABCZwAARGcA
AEZnAABIZwAATGcAAFBnAABWZwAAWGcAAFpnAABcZwAAZGcAAGhnAABqZwAAdmcAAHpnAAB+ZwAA
hGcAAJZnAACaZwAAnGcAAKJnAACyZwAAtGcAALZnAAC6ZwAAvmcAAMRnAADYZwAA3mcAAOJnAADk
ZwAA6GcAAOpnAAD2ZwAA+mcAAP5nAAAAaAAAHmgAACJoAAAmaAAA8+nf89/z6d/z1fPp38vz3+nB
1enB3/O3qvPVt/PB6d/L86rV36rp36rp1d/Vt9Wq6d+q3+nB6cvBoMHLqsvBABIWaGdhvQBPSgAA
UUoAAF5KAAAAGBVo6hJnABZo7wQTAE9KAABRSgAAXkoAAAASFmjGaLkAT0oAAFFKAABeSgAAABIW
aD4LAgBPSgAAUUoAAF5KAAAAEhZoLmh4AE9KAABRSgAAXkoAAAASFmh9MboAT0oAAFFKAABeSgAA
ABIWaNhdWgBPSgAAUUoAAF5KAAAAEhZoXEGHAE9KAABRSgAAXkoAAAAYFWjqEmcAFmizE+oAT0oA
AFFKAABeSgAAPyZoAAAoaAAALGgAADJoAAA0aAAANmgAAEZoAABKaAAAYGgAAGRoAABqaAAAbGgA
AHpoAAB+aAAAlmgAAJhoAACgaAAApGgAAKZoAACqaAAAxGgAAMhoAADKaAAAzGgAAOBoAADoaAAA
6mgAAPBoAADyaAAA9mgAAPhoAAACaQAABGkAAAZpAABAaQAATGkAAHZpAAB6aQAAfGkAAH5pAAC2
aQAAwmkAAMRpAAAYagAAGmoAAEZqAABKagAATGoAAE5qAABiagAAeGoAAHpqAACGagAAiGoAAJRq
AAC+agAAwGoAAPbs39XL7Pbs9uzB7PbstOz27PbsquyqtOy07PbstOzVnfaQ9qr2qpD2kPaQ9qr2
qpD2kPaQ9tXLAAAAABgVaOoSZwAWaFxBhwBPSgAAUUoAAF5KAAAAGBVo6hJnABZoLmh4AE9KAABR
SgAAXkoAAAASFmhnYb0AT0oAAFFKAABeSgAAABgVaOoSZwAWaD4LAgBPSgAAUUoAAF5KAAAAEhZo
xmi5AE9KAABRSgAAXkoAAAASFmh9MboAT0oAAFFKAABeSgAAABIWaC5oeABPSgAAUUoAAF5KAAAA
GBVo6hJnABZo7wQTAE9KAABRSgAAXkoAAAASFmg+CwIAT0oAAFFKAABeSgAAABIWaFxBhwBPSgAA
UUoAAF5KAAA4wGoAAMJqAADOagAA0moAANZqAAD0agAA+GoAAPxqAAACawAAEmsAABprAAAcawAA
IGsAACJrAAA2awAAOmsAADxrAAA+awAAVGsAAFZrAABaawAAYGsAAGJrAABqawAAbGsAAHBrAAB8
awAAgGsAAIRrAACiawAApmsAAKhrAACqawAAsmsAAMZrAADKawAAzGsAANRrAADWawAA6GsAAO5r
AADyawAA9GsAAPZrAAD6awAACGwAAAxsAAAObAAAEGwAACRsAAAmbAAAKGwAACpsAAAsbAAAMGwA
ADRsAAD27N/V7N/Vy+zL7NXs1cHswey37K3V7Mujy5bVy5bLjMvVy4zLt8uMy4zL1a3By8HLt9XL
t8utABIWaAoZ1ABPSgAAUUoAAF5KAAAAGBVo6hJnABZo5G60AE9KAABRSgAAXkoAAAASFmh9MboA
T0oAAFFKAABeSgAAABIWaD4LAgBPSgAAUUoAAF5KAAAAEhZoxmi5AE9KAABRSgAAXkoAAAASFmhn
Yb0AT0oAAFFKAABeSgAAABIWaORutABPSgAAUUoAAF5KAAAAEhZoXEGHAE9KAABRSgAAXkoAAAAY
FWjqEmcAFmguaHgAT0oAAFFKAABeSgAAABIWaC5oeABPSgAAUUoAAF5KAAAAEhZoJVS4AE9KAABR
SgAAXkoAADc0bAAANmwAAD5sAABIbAAAVGwAAKhsAACqbAAADm0AABBtAABCbQAAVm0AAF5tAABy
bQAAdG0AAIhtAACKbQAAEm4AABxuAAAhbgAAq24AALFuAACybgAAvW4AAMJuAADJbgAAzW4AANJu
AADTbgAA424AAOZuAADnbgAAA28AAHhvAAB+bwAApG8AAKVvAACmbwAA9uzi2OLO4tjixOLYt8Ti
reKjreyZ7I+Cj9h4rYLsgmtea9hrAAAAABgVaOoSZwAWaMtORQBPSgAAUUoAAF5KAAAAGBVo6hJn
ABZo9FmKAE9KAABRSgAAXkoAAAASFmjWCBUAT0oAAFFKAABeSgAAABgVaOoSZwAWaPxEBgBPSgAA
UUoAAF5KAAAAEhZo3RvlAE9KAABRSgAAXkoAAAASFmixD28AT0oAAFFKAABeSgAAABIWaKQHTQBP
SgAAUUoAAF5KAAAAEhZo0VbEAE9KAABRSgAAXkoAAAAYFWh+d0QAFmh+d0QAT0oAAFFKAABeSgAA
ABIWaH53RABPSgAAUUoAAF5KAAAAEhZoYBE6AE9KAABRSgAAXkoAAAASFmgzaYYAT0oAAFFKAABe
SgAAABIWaH0xugBPSgAAUUoAAF5KAAAAEhZo5G60AE9KAABRSgAAXkoAAAASFmhcQYcAT0oAAFFK
AABeSgAAJKZvAACrbwAAtW8AALZvAAC3bwAAuW8AALpvAADGbwAAAHAAAAJwAAAScAAAFHAAABZw
AAAocAAAPHAAAE5wAABQcAAAVHAAAHhwAAB8cAAAgHAAAIJwAACmcAAArHAAAD5xAABAcQAAVHEA
AFxxAABecQAAhnEAAI5xAACWcQAAqnEAAKxxAADgcQAABnIAAENyAABEcgAARnIAAPbp9unc0tzI
vty0qtyq3KrIvqCWoL6gvqC+lva+oL6Si350anR+AAAAAAAAAAAAAAAAAAAAAAAAEhZoJl8NAE9K
AABRSgAAXkoAAAASFmgZcYEAT0oAAFFKAABeSgAAABgVaOoSZwAWaPNL/ABPSgAAUUoAAF5KAAAA
DBVo6hJnABZo3RvlAAAGFmjdG+UAABIWaC8lVQBPSgAAUUoAAF5KAAAAEhZoowkaAE9KAABRSgAA
XkoAAAASFmjdG+UAT0oAAFFKAABeSgAAABIWaEh4TABPSgAAUUoAAF5KAAAAEhZo1ggVAE9KAABR
SgAAXkoAAAASFmixD28AT0oAAFFKAABeSgAAABIWaNFWxABPSgAAUUoAAF5KAAAAGBVo6hJnABZo
sQ9vAE9KAABRSgAAXkoAAAAYFWjqEmcAFmj0WYoAT0oAAFFKAABeSgAAABIWaDNphgBPSgAAUUoA
AF5KAAAmlnEAAKxxAABHcgAAEHMAAIFzAAB6dAAAFHUAACl1AAC/dQAAOncAAFJ6AADIegAAwXwA
ANR9AABAfgAApNwAALPcAABS3QAA0d0AAN/dAAB43gAA+gAAAAAAAAAAAAAAAPUAAAAAAAAAAAAA
AADlAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAMQAAAAAAAAAAAAAAADlAAAAAAAAAAAAAAAAvwAA
AAAAAAAAAAAAALoAAAAAAAAAAAAAAAC6AAAAAAAAAAAAAAAAugAAAAAAAAAAAAAAALoAAAAAAAAA
AAAAAAC6AAAAAAAAAAAAAAAAugAAAAAAAAAAAAAAALoAAAAAAAAAAAAAAAC6AAAAAAAAAAAAAAAA
vwAAAAAAAAAAAAAAALoAAAAAAAAAAAAAAAC6AAAAAAAAAAAAAAAAugAAAAAAAAAAAAAAALoAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAGdkggHvAAAEAwBnZIIB7wAA
DwAACiYAC0YlAA3GBAE4BAAPhNACXoTQAmdkJl8NABEAAA3GBgJoATgEAA+E0AIRhAAAXoTQAmCE
AABnZIIB7wAADwAACiYAC0YlAA3GBAE4BAAPhNACXoTQAmdkEzbGAAAEAABnZPNL/AAABAMAZ2Td
G+UAABRGcgAAR3IAAA9zAAAQcwAAgXMAAINzAACdcwAAunMAAMRzAADFcwAA2XMAANpzAAAsdAAA
L3QAAFd0AABkdAAAenQAAHt0AAB8dAAAjXQAAJF0AACYdAAApHQAALV0AAC8dAAAz3QAANB0AADR
dAAA1nQAANt0AADgdAAAE3UAABR1AAAmdQAAJ3UAAEN1AABNdQAAUXUAAF91AAC+dQAA6XYAAOp2
AAA5dwAAOncAAFN3AABgdwAAbHcAAHd3AADOdwAA0ncAAPR3AAAjeAAAP3gAAPbp39XLvrS+tL60
vsu+tL7pqumq6arpoOmq6arpqunfk4WT1ZPVk9Wg1ZPVk9WT1aDVk9UAABoWaIIB7wBPSgAAUUoA
AF5KAABtSAkEc0gJBAAYFWjqEmcAFmiCAe8AT0oAAFFKAABeSgAAABIWaGAROgBPSgAAUUoAAF5K
AAAAEhZoGXGBAE9KAABRSgAAXkoAAAASFmgzaYYAT0oAAFFKAABeSgAAABgVaOoSZwAWaCZfDQBP
SgAAUUoAAF5KAAAAEhZoJl8NAE9KAABRSgAAXkoAAAASFmiCAe8AT0oAAFFKAABeSgAAABIWaBM2
xgBPSgAAUUoAAF5KAAAAGBVo6hJnABZo80v8AE9KAABRSgAAXkoAAAASFmiCP4kAT0oAAFFKAABe
SgAAND94AABHeAAASXgAAE94AABheAAAZngAAG94AAB+eAAAg3gAANR4AAANeQAAFXkAAEB5AABD
eQAAYXkAAHJ5AACheQAAz3kAAOd5AADqeQAA+3kAAMR6AADGegAAyHoAAPB6AAD6egAAMnsAAGh7
AABuewAAlHsAAMh7AADuewAA8nsAAAZ8AAARfAAAFnwAABd8AAAsfAAAOnwAAFh8AABjfAAAZ3wA
AHp8AADAfAAAa30AAHZ9AADTfQAACH4AACx+AAA8fgAAAIAAAADcAAAm3AAASNwAAKPcAACz3AAA
wdwAAOLcAADj3AAANd0AADbdAABQ3QAAUd0AAGTdAABo3QAAat0AAHbdAACj3QAA8+nz6fPp8+nz
6d/p3+nz6dXf1enz6fPp1enV6fPp8+nz6fPp8+nz6fPp8+nV6fPp8+nT6dXp8+nz6cS4xLjEuKy4
xAAAAAAAFhZoMwMiAE9KAABRSgAAXkoAAHRIAAAAFhZoggHvAE9KAABRSgAAXkoAAHRIAAAAHBVo
6hJnABZoggHvAE9KAABRSgAAXkoAAHRIAAAAA1UIARIWaDMDIgBPSgAAUUoAAF5KAAAAEhZoYBE6
AE9KAABRSgAAXkoAAAASFmiCAe8AT0oAAFFKAABeSgAAABgVaOoSZwAWaIIB7wBPSgAAUUoAAF5K
AABDZCBzZWxlY3Rpb24gYW5kIHZhbGlkYXRpb24gYXJlIGFwcGxpZWQgd2hlbiB0aGUgZnVuY3Rp
b24gaXMgaW5zdGFudGlhdGVkLiAgIFN1Y2ggdXNhZ2UgY2FuIGJlIGluZGljYXRlZCwgZm9yIGlu
c3RhbmNlLCB3aXRoIGRvdWJsZSBwYXJlbnM7IGkuZS4gKChnZW5lcmljUGFybXMpKS4gIA1DYXB0
dXJlZCBOYW1lcw1BbHRob3VnaCBpdCBpcyBvZnRlbiBsb29rZWQgdXBvbiBhcyBkYW5nZXJvdXMs
IHVzZSBvciCTY2FwdHVyZZQgb2YgbmFtZXMgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlY2xhcmF0
aW9uIG9yIGRlZmluaXRpb24gaXMgY29tbW9uLCBidXQgb2Z0ZW4gbGFja3MgY2xhcml0eS4gIA1G
b3IgbGFtYmRhcywgdGhpcyB1c2UgaXMgZXhwbGljaXRseSBpbmRpY2F0ZWQgd2l0aCBzcGVjaWFs
IGJyYWNrZXQgc3ludGF4LiAgVGhpcyBjYW4gYmUgZXh0ZW5kZWQgZm9yIGFueSBmdW5jdGlvbiBk
ZWNsYXJhdGlvbi4NRm9yIGV4YW1wbGU6IA0gICAgZnVuY3Rpb25OYW1lIChpbnB1dHMgLiAuIC4g
KShvAHUAdABwAHUAdABzACAALgAgAC4AIAAuACAAKQAgAJIhIAByAGUAcwB1AGwAdAAgAFsAPQBu
AGEAbQBlADEALAAgACYAbgBhAG0AZQAyACwAIAAuACAALgAgAC4AIABdACAAewAuACAALgAgAC4A
fQA7ACAADQBvAHIAIABiAGUAdAB0AGUAcgAsAA0AIAAgACAAIABmAHUAbgBjAHQAaQBvAG4ATgBh
AG0AZQAoAGkAbgBwAHUAdABzAC4AIAAuACAALgApACgAbwB1AHQAcAB1AHQAcwAuACAALgAgAC4A
KQAgAJIhIAByAGUAcwB1AGwAdAAgAFsAbgBhAG0AZQAxACAALgAgAC4AIAAuAF0AWwBuAGEAbQBl
ADIAIAAuACAALgAgAC4AXQAgAHsALgAgAC4AIAAuAH0AOwAgAA0AQQBsAHMAbwAsACAAdwBoAGkA
bABlACAAYwBhAHAAdAB1AHIAZQAgAG8AYwBjAHUAcgBzACAAaQBuACAAdABoAGUAIABzAGMAbwBw
AGUAIABvAGYAIAB0AGgAZQAgAGYAdQBuAGMAdABpAG8AbgAgAGQAZQBjAGwAYQByAGEAdABpAG8A
bgAsACAAaQB0ACAAaQBzACAAYwBhAG4AIABhAGwAcwBvACAAYgBlACAAdQBzAGUAZgB1AGwAIAB0
AG8gcHJvdmlkZSBjYXB0dXJlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbiBkZWZpbml0
aW9uIGFuZCwgcG9zc2libHkgZXZlbiB3aXRoIGdlbmVyaWNzLCBpbiB0aGUgaW5zdGFudGlhdGlv
biBjb250ZXh0LiBUaGlzIGNvdWxkIGJlIGluZGljYXRlZCB3aXRoIHJlcGV0aXRpb24gb2YgcHJl
Zml4IGNoYXJhY3RlcnMgZm9yIHRoZSB1bnVzdWFsIGxhdHRlciBjYXNlcywgZS5nLiCTPT2UIGFu
ZCCTPT09lC4gIFNpbmNlLCBzdWNoIHVzZXMgYXJlIHVudXN1YWwgYW5kIHJlcXVpcmUgc3BlY2lh
bCBub3RpY2UsIHNpbXBsZXIgbWlnaHQgYmUgdG8gdXNlIGRvdWJsZSBhbmQgdHJpcGxlIGJyYWNr
ZXRzIGluIHRoZSBkZWNsYXJhdGlvbi4NQXMgcGFydCBvZiB0aGlzLCB0aGUgc3F1YXJlIGJyYWNr
ZXRzIGNhbiBhbHNvIGludHJvZHVjZSB0ZW1wbGF0ZSByZXF1aXJlbWVudHM6DQlmdW4oIyNBIGEs
ICMjQiBiKSAoIyNDIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
YwApAJIhIAByAGUAcwB1AGwAdAAgAFsAeAAsACAAKABjAD0AIABhACoAeAArAGIAIAApACAAXQAg
AHsAIAAuACAALgAgAC4AIAB9ACAAOwANAE4AYQBtAGUAIABTAGMAbwBwAGUAIABVAHMAZQANAEMA
bABhAHIAaQB0AHkAIABpAG4AIAB0AGgAZQAgAHMAYwBvAHAAZQAgAG8AZgAgAG4AYQBtAGUAcwAg
AHUAcwBlAGQAIABpAG4AIABjAG8AZABlACAAaQBzACAAYwByAGkAdABpAGMAYQBsACAAdABvACAA
dQBuAGQAZQByAHMAdABhAG4AZABpAG4AZwAgAHQAaABlACAAaQBuAHQAZQBuAHQAIABvAGYAIAB0
AGgAZQAgAHAAcgBvAGcAcgBhAG0AcwAgAGkAbgAgAHcAaABpAGMAaAAgAHQAaABlAHkAIABvAGMA
YwB1AHIALgAgACAAVABoAGkAcwAgAGkAcwAgAHIAZQBsAGUAdgBhAG4AdAAgAGEAdAAgAGQAaQBm
AGYAZQByAGUAbgB0ACAAbABlAHYAZQBsAHMAIABvAGYAIABiAHIAYQBjAGsAZQB0AHMALAAgAGYA
dQBuAGMAdABpAG8AbgBzACwAIABwAGEAcgBhAG0AZQB0AGUAcgBzACwAIABuAGEAbQBlACAAcwBj
b3BlLCBkZXJpdmVkIGNsYXNzIGRlZmluaXRpb25zIGFuZCBsb2NhbCBkZWNsYXJhdGlvbnMsIGV0
Yy4gIA1MYWNrIG9mIGNsYXJpdHkgb2YgdGhlIHNjb3BlIG9mIGEgbmFtZSBjYW4gbGVhZCB0byBp
bnRlcmVzdGluZyBtYWdhemluZSBjb2x1bW5zLiAgTW9yZSBjcml0aWNhbGx5IHRoaXMgaXQgY2Fu
IGxlYWQgdG8gc3VidGxlIGJ1Z3MgZXNwZWNpYWxseSB3aGVuIGNvZGUgaXMgbGF0ZXIgbW9kaWZp
ZWQgYW5kIGV4dGVuZGVkLiANUHJlZml4IGNoYXJhY3RlcnMgYXJlIHVzZWZ1bCBoZXJlIGFsc28g
dG8gaGlnaGxpZ2h0IHRoZSB1c2Ugb2YgbmFtZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIGxv
Y2FsIHNwZWNpZmljYXRpb24uICBGdW5jdGlvbiBwYXJhbWV0ZXJzIGluIHNvbWUgbGFuZ3VhZ2Vz
IGFyZSBhZGRyZXNzZWQgd2l0aCBhIGxlYWRpbmcgY2hhcmFjdGVyIHN1Y2ggYXMgkySULiAgQ2Fw
dHVyZWQgbmFtZXMgcmVxdWlyZSBtb3JlIGNsYXJpdHkgYW5kIHBlcmhhcHMgYSBwcmVmaXggc3Vj
aCBhcyCTQJQuICBMb2NhbCB2YXJpYWJsZSBuYW1lcyBpbiBhIGNsYXNzIG9mdGVuIGhhdmUgYSCT
X5QgcHJlZml4LCBpbiBib3RoIHRoZSBkZWNsYXJhdGlvbiBhbmQgdXNlLiAgU3VjaCBzcGVjaWZp
Y2F0aW9ucyBhcmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBjb2RlIGFuZCBjb3VsZCBiZSBp
bnNlcnRlZCBieSB0aGUgY29tcGlsZXIgKG9yIHRvb2wpIGF1dG9tYXRpY2FsbHksIGlmIG5vdCBz
dXBwbGllZC4gIFNob3J0IGFsaWFzIHByZWZpeGVzIGRlcml2ZWQgZnJvbSBuYW1lc3BhY2VzIGFy
ZSB1c2VmdWwgdG8gaWRlbnRpZnkgdGhlIHNvdXJjZSBhbmQgaGVuY2UgbWVhbmluZyBvZiBuYW1l
cy4gICANU29tZSBjb25zb2xpZGF0aW9uIGFuZCBzeXN0ZW1pemF0aW9uIG9mIHN1Y2ggY29udmVu
dGlvbnMgY2FuIGJlIGVpdGhlciBleHBsaWNpdGx5IHNwZWNpZmllZCBieSBzeW50YXgsIG9yIGlt
cGxpY2l0bHkgYnkgcnVsZXMgZGVjbGFyZWQgdG8gdGhlIGNvbXBpbGVyIGJ5IHByYWdtYXMuDUZh
Y3RvcmVkIEF0dHJpYnV0ZXMNS2V5d29yZHMgZm9yIHB1YmxpYywgcHJvdGVjdGVkLCBwcml2YXRl
LCBuYW1lc3BhY2UgYW5kIHVzaW5nIGRpcmVjdGl2ZXMsIGFsbCBpbnRyb2R1Y2UgYnJhY2tldGVk
IHNlY3Rpb25zIG9mIGRlY2xhcmF0aW9ucyB3aXRoIGNvbW1vbiBhdHRyaWJ1dGVzLg1UaGlzIGNv
dWxkIGJlIHN5c3RlbWF0aWNhbGx5IGV4dGVuZGVkIHRvIHByb3ZpZGUgc3RydWN0dXJpbmcgZm9y
IGFueSBhdHRyaWJ1dGUuICBJdCB3b3VsZCBiZSBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgbG9uZyBs
aXN0cyBvZiBkZWNsYXJhdGlvbnMuICANQWxzbywgaXQgY291bGQgY2xhcmlmeSB0aGUgdXNlIG9m
IJNzdGF0aWOULCB3aGljaCBjb25ub3RlcyBsaXR0bGUgb2Ygd2hhdCBpdCBhY3R1YWxseSBtZWFu
cy4gIEluc2lkZSBhIGNsYXNzIG9yIGZ1bmN0aW9uIHNjb3BlLCBhIGtleXdvcmQgc3VjaCBhcyCT
Zml4ZWSUIG1pZ2h0IGJlIGNsZWFyZXIuICBPdXRzaWRlIGEgY2xhc3Mgb3IgZnVuY3Rpb26j3QAA
qd0AAKrdAAC03QAAw90AAN3dAADf3QAA490AAFTeAABY3gAAYt4AAHbeAAB43gAAjt4AAJbeAAAE
3wAABt8AAB7fAAAg3wAAWt8AAKLfAACy3wAAAeAAAALgAAAS4AAAJOAAADHgAAA/4AAAQOAAAEHg
AABK4AAATuAAAFTgAABb4AAAXuAAAGXgAABy4AAAc+AAAHrgAAB84AAAuOAAALngAADt4AAAJ+EA
AG3hAAAa4gAAIOIAADDiAAAy4gAANuIAAFLiAADx4tbi1uLMv7W/teK/zL+1v7W/zL/Mq8yrzL/M
v8y/zL/Mq7/Mq7/Mnsy1zL+Uv4qUvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAASFmhdHRYAT0oAAFFK
AABeSgAAABIWaMxyXABPSgAAUUoAAF5KAAAAGBVoowkaABZoggHvAE9KAABRSgAAXkoAAAASFmh/
bp4AT0oAAFFKAABeSgAAABIWaGAROgBPSgAAUUoAAF5KAAAAGBVo6hJnABZoggHvAE9KAABRSgAA
XkoAAAASFmiCAe8AT0oAAFFKAABeSgAAABYWaIIB7wBPSgAAUUoAAF5KAAB0SAAAABwVaOoSZwAW
aIIB7wBPSgAAUUoAAF5KAAB0SAAAABwVaOoSZwAWaDMDIgBPSgAAUUoAAF5KAAB0SAAAMnjeAACO
3gAAQt8AAG3hAAC84QAAUuIAAHDiAAA/5AAA9+QAAF7nAAAB6AAAFegAAKfoAAA46QAATPQAAHj0
AACY9AAAH/UAAMH1AADD9QAAxPUAAMb1AAD2AAAAAAAAAAAAAAAA8QAAAAAAAAAAAAAAAPEAAAAA
AAAAAAAAAADxAAAAAAAAAAAAAAAA8QAAAAAAAAAAAAAAAOwAAAAAAAAAAAAAAADnAAAAAAAAAAAA
AAAA4gAAAAAAAAAAAAAAAOIAAAAAAAAAAAAAAADiAAAAAAAAAAAAAAAA3QAAAAAAAAAAAAAAANgA
AAAAAAAAAAAAAADTAAAAAAAAAAAAAAAA0wAAAAAAAAAAAAAAAM4AAAAAAAAAAAAAAADJAAAAAAAA
AAAAAAAAxAAAAAAAAAAAAAAAAL8AAAAAAAAAAAAAAAC6AAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAA
ALoAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAABnZJtiPQAABAAAZ2S5TSYAAAQAAGdksz/HAAAE
AwBnZLM/xwAABAAAZ2TrMeoAAAQAAGdkY3sDAAAEAABnZGRKrgAABAMAZ2RkSq4AAAQAAGdkEg4m
AAAEAABnZAlAzgAABAMAZ2QJQM4AAAQAAGdkggHvAAAIAAARhAAAYIQAAGdkggHvAAAVUuIAAGji
AABu4gAAcOIAAKziAADG4gAACOMAABTjAAAk4wAANuMAAITjAAAE5AAABuQAAA7kAAAT5AAAFOQA
ABbkAAAj5AAAPuQAAD/kAABV5AAAVuQAAGbkAABq5AAAfuQAAILkAACO5AAAkeQAAKHkAACm5AAA
0+QAANTkAADa5AAA2+QAAOfkAAD25AAA9+QAAPLk8tjM2MDYzNizqZ+ps5KfqYh7iHtxe8x7n3Gf
cYhxiHGIZAAAAAAAAAAAAAAAAAAAAAAYFWgJQM4AFmgJQM4AT0oAAFFKAABeSgAAABIWaAlAzgBP
SgAAUUoAAF5KAAAAGBVo6hJnABZoCUDOAE9KAABRSgAAXkoAAAASFmgSDiYAT0oAAFFKAABeSgAA
ABgVaOoSZwAWaIdxAQBPSgAAUUoAAF5KAAAAEhZoh3EBAE9KAABRSgAAXkoAAAASFmiCAe8AT0oA
AFFKAABeSgAAABgVaOoSZwAWaIIB7wBPSgAAUUoAAF5KAAAAFhZoEg4mAE9KAABRSgAAXkoAAHRI
AAAAFhZoggHvAE9KAABRSgAAXkoAAHRIAAAAFhZoCUDOAE9KAABRSgAAXkoAAHRIAAAAGhZoh3EB
AE9KAABRSgAAXkoAAG1ICQRzSAkEABoWaAlAzgBPSgAAUUoAAF5KAABtSAkEc0gJBCT35AAACeUA
AArlAAAU5QAAHuUAAMHlAADC5QAAw+UAAAjmAAAJ5gAADeYAAETmAABl5gAAaOYAAGzmAACk5gAA
qOYAAO/mAADw5gAAXecAAAHoAAAU6AAAFegAACLoAAA86AAAPugAAEfoAABR6AAAUugAAFzoAABd
6AAAXugAAGLoAACn6AAAtegAAPPp8+nz3/Pp3+nf1d/Lvsu+y7TzppWLfnR+dItqYGp0i3QAAAAA
AAAAAAAAAAAAAAAAAAASFmhAabcAT0oAAFFKAABeSgAAABIWaLlNJgBPSgAAUUoAAF5KAAAAEhZo
Y3sDAE9KAABRSgAAXkoAAAAYFWjqEmcAFmhmf+8AT0oAAFFKAABeSgAAABIWaGZ/7wBPSgAAUUoA
AF5KAAAAIBVo6hJnABZoZEquAE9KAABRSgAAXkoAAG1ICQRzSAkEABoWaGRKrgBPSgAAUUoAAF5K
AABtSAkEc0gJBAASFmjHM0AAT0oAAFFKAABeSgAAABgVaOoSZwAWaGAROgBPSgAAUUoAAF5KAAAA
EhZoYBE6AE9KAABRSgAAXkoAAAASFmjGHGEAT0oAAFFKAABeSgAAABIWaIdxAQBPSgAAUUoAAF5K
AAAAEhZoEg4mAE9KAABRSgAAXkoAAAAYFWjqEmcAFmgSDiYAT0oAAFFKAABeSgAAIrXoAADE6AAA
6OgAABrpAAA46QAAPOkAAD/pAABG6QAAWukAAGLpAABr6QAAlekAAJbpAACw6QAAtukAALjpAAC6
6QAAyukAAMvpAADQ6QAA0ukAANfpAADj6QAA5ekAAADqAAAA9AAACPQAAA70AAAf9AAAIfQAAEv0
AABW9AAAXvQAAGj0AAB29AAAd/QAAHj0AACE9AAAifQAAJX0AACX9AAA9uz27OL27NjL2MvYwbfB
t8HLt623y9jLq8HLwcut7KHsy+zLkIJ0kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaFmhM
UncAT0oAAFFKAABeSgAAbUgJBHNICQQAGhZoZEquAE9KAABRSgAAXkoAAG1ICQRzSAkEACAVaOoS
ZwAWaLM/xwBPSgAAUUoAAF5KAABtSAkEc0gJBAASFmi5TSYAT0oAAFFKAABeSgAAAANVCAESFmiW
b4oAT0oAAFFKAABeSgAAABIWaEUuagBPSgAAUUoAAF5KAAAAEhZof26eAE9KAABRSgAAXkoAAAAY
FWjqEmcAFmhmf+8AT0oAAFFKAABeSgAAABIWaGZ/7wBPSgAAUUoAAF5KAAAAEhZoQGm3AE9KAABR
SgAAXkoAAAASFmhjewMAT0oAAFFKAABeSgAAABIWaExSdwBPSgAAUUoAAF5KAAAoIGNvbnRleHQs
IG5hbWVzIGNhbiBiZSBkZWNsYXJlZCCTZmlsZSBzY29wZZQsIG9yLCBwZXJoYXBzIGJldHRlciwg
k2xvY2FslC4gDUEgcmVsYXRlZCBjYXRlZ29yeSBtaWdodCBiZSCTdGhyZWFkIGxvY2FslC4NTGVh
ZGluZyBOYW1lcyBpbiBEZWNsYXJhdGlvbnMgIA1NdWNoIG9mIHRoZSBwcmV2aW91cyBhaW1zIHRv
IGludHJvZHVjZSBuYW1lcyBhdCB0aGUgbGVmdCBvZiBhIGxpbmUgb2YgY29kZSB0byBtYWtlIGl0
IGVhc3kgdG8gc2NhbiB0aGUgY29kZSBsb29raW5nIGZvciBhIGRlY2xhcmF0aW9uLg1EZWNsYXJh
dGlvbnMgY2FuIGJlIG9idHVzZSB3aGVuIHRoZXkgYnVyeSBhIG5hbWUgZGVjbGFyYXRpb24gaW4g
dGhlIG1pZGRsZSBvZiBhIGNvbXBsZXggc3ludGF4IHN0cnVjdHVyZS4gIEZ1bmN0aW9uIHR5cGUg
bmFtZXMgYXJlIGEgc2ltcGxlIGFuZCBvYnZpb3VzIGV4YW1wbGUuIA0DDQ0EDQ0DDQ0EDQ0NEyBE
QVRFIFxAICJNL2QveXkiIBQxMS8xMi8xNhUJCVBhZ2UgEyBQQUdFIBQxMRUgb2YgEyBOVU1QQUdF
UyAUMTEVDQ0NDQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJf0AADW9AAA4/QA
APv0AAD/9AAAHvUAAB/1AAAz9QAAOfUAAET1AABQ9QAAXPUAAJP1AACY9QAAovUAAKP1AADA9QAA
wfUAAML1AADE9QAAxfUAAMf1AADI9QAAyvUAAMv1AADN9QAAzvUAAM/1AADh9QAA4vUAAOr1AADr
9QAA8vUAAPP1AAD59QAA+vUAAPz1AAD99QAAAfYAAAL2AAAM9gAADfYAAA/2AAAQ9gAAE/YAABT2
AAAV9gAA8+nf6d/z6dXp89/zy/Pf6b62sraytrK2sq6mrqadpq6TjZOCk42TjZOCk66yvgAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAFRZo4idWADBKJQBtSAAEbkgABHUIAQoWaP0v3wAwSiUAABMD
agAAAAAWaP0v3wAwSiUAVQgBERZoFHxqAG1IAARuSAAEdQgBDwNqAAAAABZo/S/fAFUIAQYWaP0v
3wAABhZoVVPFAAAPA2oAAAAAFmhVU8UAVQgBGBVo6hJnABZoSDBeAE9KAABRSgAAXkoAAAASFmig
UYMAT0oAAFFKAABeSgAAABIWaKQHTQBPSgAAUUoAAF5KAAAAEhZouU0mAE9KAABRSgAAXkoAAAAS
FmiHcQEAT0oAAFFKAABeSgAAABgVaOoSZwAWaLM/xwBPSgAAUUoAAF5KAAAuxvUAAMf1AADJ9QAA
yvUAAMz1AADN9QAAzvUAABH2AAAS9gAAE/YAABT2AAAV9gAA/QAAAAAAAAAAAAAAAPgAAAAAAAAA
AAAAAAD9AAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAP0AAAAAAAAAAAAAAADzAAAAAAAAAAAAAAAA
8wAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAA/QAAAAAAAAAAAAAAAO4AAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAABAAAZ2S5TSYAAAQkAGdkm2I9AAAEAABnZJtiPQAAAQAAAAs2ACZQAQAxkGgBOnBx
OUgAH7DQLyCw4D0hsKAFIrCgBSOQoAUkkKAFJbAAABew0AIYsNACDJDQAgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBlgAEgABAHYBDwAHAAAAAAAAAAAA
BAAIAAAACAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANgYAADYGAAA2BgAANgYA
ADYGAAA2BgAANgYAADYGAAA2BgAAdgIAAHYCAAB2AgAAdgIAAHYCAAB2AgAAdgIAAHYCAAB2AgAA
NgYAADYGAAA2BgAABgAAAAYAAAA2BgAAPgIAADYGAAA2BgAANgYAADYGAAA2BgAANgYAAAYAAAA2
BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYG
AAA2BgAANgYAADYGAAA2BgAANgYAAAAAAAA2BgAANgYAAAYAAAA2BgAABgAAADYGAAA2BgAANgYA
ADYGAAA2BgAANgYAAAAAAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAABgAAADYGAAA2BgAA
NgYAADYGAABgAQAAQAEAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2
BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYG
AAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYA
ADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAA
NgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAAsAMAADYGAAAy
BgAAEAAAAMADAADQAwAA4AMAAPADAAAABAAAEAQAACAEAAAwBAAAQAQAAFAEAABgBAAAcAQAAIAE
AACQBAAAwAMAANADAADgAwAA8AMAAAAEAAAQBAAAMgYAACACAADQAQAA4AEAACAEAAAwBAAAQAQA
AFAEAABgBAAAcAQAAIAEAACQBAAAwAMAANADAADgAwAA8AMAAAAEAAAQBAAAIAQAADAEAABABAAA
UAQAAGAEAABwBAAAgAQAAJAEAADAAwAA0AMAAOADAADwAwAAAAQAABAEAAAgBAAAMAQAAEAEAABQ
BAAAYAQAAHAEAACABAAAkAQAAMADAADQAwAA4AMAAPADAAAABAAAEAQAACAEAAAwBAAAQAQAAFAE
AABgBAAAcAQAAIAEAACQBAAAwAMAANADAADgAwAA8AMAAAAEAAAQBAAAIAQAADAEAABABAAAUAQA
AGAEAABwBAAAgAQAAJAEAADAAwAA0AMAAOADAADwAwAAAAQAABAEAAAgBAAAMAQAAEAEAABQBAAA
YAQAAHAEAACABAAAkAQAADABAABQAQAA8AEAAAACAAAQAgAAVgIAAHYCAACQAgAAoAIAALACAADA
AgAA0AIAAIACAADgAgAA8AIAAAADAAAQAwAAIAMAADADAABAAwAA4AIAAPACAAAAAwAAEAMAACAD
AAAwAwAAQAMAAOACAADwAgAAAAMAABADAAAgAwAAMAMAAEADAADgAgAA8AIAAAADAAAQAwAAIAMA
ADADAABAAwAA4AIAAPACAAAAAwAAEAMAACADAAAwAwAAQAMAAOACAADwAgAAAAMAABADAAAgAwAA
MAMAAEADAADgAgAA8AIAAAADAAAQAwAAIAMAADADAABAAwAA4AIAAPACAAAAAwAAEAMAACADAAAw
AwAAQAMAAOACAADwAgAAAAMAABADAAAgAwAAMAMAAEADAADgAgAA8AIAAAADAAAQAwAAIAMAADAD
AABAAwAA4AIAAPACAAAAAwAAEAMAACADAAAwAwAAQAMAAOACAADwAgAAAAMAABADAAAgAwAAMAMA
AEADAADgAgAA8AIAAAADAAAQAwAAIAMAADADAABAAwAA4AIAAPACAAAAAwAAEAMAACADAAAwAwAA
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
N/m9vR7fu7tPtnc0d+YsqTJ9N1/VxPXdfb1x+O7eI5B0vmw1Jt1md9CqdJv9SSUYDTqV7rA1qIxa
w/ZoMhqGne7kle9daHDQbw6D1rhTadWHw0rQqin6nW6lHTQa/aDd74yD/qu8jYGVZ+kjtwWYV/O6
918AAAD//wMAUEsDBBQABgAIAAAAIQAN0ZCftgAAABsBAAAnAAAAdGhlbWUvdGhlbWUvX3JlbHMv
dGhlbWVNYW5hZ2VyLnhtbC5yZWxzhI9NCsIwFIT3gncIb2/TuhCRJt2I0K3UA4TkNQ02PyRR7O0N
riwILodhvplpu5edyRNjMt4xaKoaCDrplXGawW247I5AUhZOidk7ZLBggo5vN+0VZ5FLKE0mJFIo
LjGYcg4nSpOc0IpU+YCuOKOPVuQio6ZByLvQSPd1faDxmwF8xSS9YhB71QAZllCa/7P9OBqJZy8f
Fl3+UUFz2YUFKKLGzOAjm6pMBMpburrE3wAAAP//AwBQSwECLQAUAAYACAAAACEA6d4Pv/8AAAAc
AgAAEwAAAAAAAAAAAAAAAAAAAAAAW0NvbnRlbnRfVHlwZXNdLnhtbFBLAQItABQABgAIAAAAIQCl
1qfnwAAAADYBAAALAAAAAAAAAAAAAAAAADABAABfcmVscy8ucmVsc1BLAQItABQABgAIAAAAIQBr
eZYWgwAAAIoAAAAcAAAAAAAAAAAAAAAAABkCAAB0aGVtZS90aGVtZS90aGVtZU1hbmFnZXIueG1s
UEsBAi0AFAAGAAgAAAAhAOx/TDiVBwAAySAAABYAAAAAAAAAAAAAAAAA1gIAAHRoZW1lL3RoZW1l
L3RoZW1lMS54bWxQSwECLQAUAAYACAAAACEADdGQn7YAAAAbAQAAJwAAAAAAAAAAAAAAAACfCgAA
dGhlbWUvdGhlbWUvX3JlbHMvdGhlbWVNYW5hZ2VyLnhtbC5yZWxzUEsFBgAAAAAFAAUAXQEAAJoL
AAAAADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMi
Pz4NCjxhOmNsck1hcCB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcv
ZHJhd2luZ21sLzIwMDYvbWFpbiIgYmcxPSJsdDEiIHR4MT0iZGsxIiBiZzI9Imx0MiIgdHgyPSJk
azIiIGFjY2VudDE9ImFjY2VudDEiIGFjY2VudDI9ImFjY2VudDIiIGFjY2VudDM9ImFjY2VudDMi
IGFjY2VudDQ9ImFjY2VudDQiIGFjY2VudDU9ImFjY2VudDUiIGFjY2VudDY9ImFjY2VudDYiIGhs
aW5rPSJobGluayIgZm9sSGxpbms9ImZvbEhsaW5rIi8+AAAAAMV2AAAOAAD8AAAAAP////8AAAAA
AwAAAAYAAAAGAAAACQAAAAwAAAAMAAAADAAAAAwAAAAMAAAAUgAAAFIAAABSAAAAVQAAAAAIAABS
CgAAfA0AAHQQAABvFQAAHhsAAIMeAACDIgAAHSYAAGQpAAAaLAAAVDEAAKs1AADJNwAAvTsAANVD
AABHRwAAJUwAAL5OAAAQUQAAZFMAAEpVAAB2VwAA+lgAAGpaAAAUXAAABF0AAN5eAAB8YAAA9GEA
AM5iAADNZAAAoGYAACZoAADAagAANGwAAKZvAABGcgAAP3gAAKPdAABS4gAA9+QAALXoAACX9AAA
FfYAAEAAAABCAAAAQwAAAEQAAABFAAAARgAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE8AAABQ
AAAAUQAAAFIAAABTAAAAVAAAAFUAAABXAAAAWAAAAFkAAABaAAAAWwAAAF0AAABeAAAAXwAAAGAA
AABhAAAAYgAAAGMAAABkAAAAZgAAAGcAAABoAAAAaQAAAGoAAABsAAAAbQAAAHUAAAB3AAAAeAAA
AHkAAAB8AAAAAAgAAAodAADRMgAAJUwAAKZZAABWZAAAlnEAAHjeAADG9QAAFfYAAEEAAABHAAAA
TgAAAFYAAABcAAAAZQAAAGsAAAB2AAAAfQAAAA0AAAAgAAAAKQAAADEAAAA4AAAAOwAAAEAAAABL
AAAATgAAAFUAAAATH7T/lYATIbT/lYATGrT/lYAPAADwQAAAAAAABvAgAAAAAQgAAAMAAAACAAAA
AgAAAAEAAAACAAAAAgAAAAEAAABAAB7xEAAAAP//AAAAAP8AgICAAPcAABABDwAC8EgAAAAgAAjw
CAAAAAEAAAAACAAADwAD8DAAAAAPAATwKAAAAAEACfAQAAAAAAAAAAAAAAAAAAAAAAAAAAIACvAI
AAAAAAgAAAUAAAAADwAC8JIAAAAQAAjwCAAAAAEAAAABBAAADwAD8DAAAAAPAATwKAAAAAEACfAQ
AAAAAAAAAAAAAAAAAAAAAAAAAAIACvAIAAAAAAQAAAUAAAAPAATwQgAAABIACvAIAAAAAQQAAAAO
AABTAAvwHgAAAL8BAAAQAMsBAAAAAP8BAAAIAAQDCQAAAD8DAQABAAAAEfAEAAAAAQAAAAAAAABj
DAAAawwAAHMOAAB5DgAAew4AAIIOAACEDgAAiw4AANAOAADTDgAAPg8AAEYPAAAaIAAAICAAAE45
AABROQAAkToAAJU6AACaOgAAnjoAAONIAADrSAAA7UgAAPdIAAD4SAAAAkkAADxKAABCSgAARUoA
AFBKAABwSwAAcUsAAIRLAACOSwAAmUsAAJpLAAClSwAAr0sAAC1PAAAyTwAArVAAALBQAAC+UAAA
wVAAANFQAADYUAAAP1EAAEBRAABTUQAAVFEAAL9SAADCUgAAz1IAANJSAADiUgAA6VIAAGFTAABi
UwAACVQAAAxUAABmVAAAaVQAADlWAAA6VgAARFYAAFJWAACfVgAAoFYAAKtWAAC0VgAACFcAAAlX
AAAWVwAAHlcAAGdXAABqVwAAe1cAAIRXAADAVwAAw1cAANRXAADdVwAA3lcAAOVXAADnVwAA71cA
AChYAAArWAAAPFgAAEVYAABGWAAAS1gAAKdYAACoWAAAEVkAABJZAADPWQAA0lkAAEBbAABLWwAA
f1sAAIxbAACcWwAAqlsAAM9bAADaWwAAkV8AAJZfAAD/YQAABmIAAAZlAAASZQAAFGUAABtlAAAl
ZQAALWUAALFnAAC9ZwAAv2cAAMZnAADQZwAA2GcAAOFnAADqZwAAX2kAAGVpAABuaQAAemkAAL9q
AADLagAAJ2sAADNrAAChbQAAom0AAMVtAADIbQAAcXYAAHN2AAB0dgAAdnYAAHd2AAB5dgAAenYA
AHx2AAB9dgAAw3YAAMZ2AAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAH
ABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAdAAcA
HAAHAB0ABwAcAAcAHAAHABwABwAdAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAc
AAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcABwACAAcAAgAHAAIABwACAAcAAgAAAAAAtAEAAL4BAAA1CAAAUggAAHcMAAB9DAAApAwA
AKwMAADQDgAA1Q4AAOsPAAD4DwAAvxcAAMoXAABVJAAA7yQAAAY4AAAUOAAAPTgAAEI4AABRQAAA
WUAAAO9HAADzRwAA40gAAO1IAABDSQAASUkAAFFJAABVSQAARUoAAFBKAADoSgAA8EoAAPFKAADz
SgAAS0sAAFRLAABYTgAAXU4AAJ5OAACrTgAA7k4AAPZOAAAFTwAACE8AAFFPAABaTwAAgU8AAIRP
AACbTwAApU8AAPVPAAAAUAAAElAAABVQAABMUAAAVVAAAKdQAACrUAAA9lAAAAJRAAARUQAAFFEA
AOJRAADnUQAAEFIAABNSAAAyUgAANVIAAJhSAACdUgAAvFIAAMJSAAAFUwAACFMAAF1TAABgUwAA
nFMAAKZTAADMUwAAz1MAAAZUAAAMVAAAblQAAHhUAADAVAAAw1QAACVWAAAoVgAARFYAAE1WAAB5
VgAAfFYAAKlWAACsVgAA4lYAAOVWAAAUVwAAF1cAADFXAAA4VwAAm1cAAKJXAAAAWAAAB1gAAJNY
AACWWAAAslgAALVYAADqWAAA7VgAABtZAAAeWQAAqVkAAK1ZAAC+WQAAwVkAAEZbAABMWwAA1VsA
AN1bAACnXAAAsVwAAPBfAAAEYAAAI2UAACVlAADOZwAA0GcAAIBpAACOaQAA1GoAANtqAAA6awAA
QWsAAJltAACdbQAAcXYAAHN2AAB0dgAAdnYAAHd2AAB5dgAAenYAAHx2AAB9dgAAw3YAAMZ2AAAH
AAUABwAFAAcAMwAHADMABwAzAAcABQAHAAUABwAEAAcAMwAHAAUABwAzAAcAMwAHADMABwAzAAcA
BQAHADMABwAFAAcAMwAHADMABwAzAAcAMwAHADMABwAzAAcAMwAHADMABwAzAAcAMwAHADMABwAz
AAcAMwAHADMABwAzAAcAMwAHADMABwAzAAcAMwAHADMABwAzAAcAMwAHADMABwAzAAcAMwAHADMA
BwAzAAcAMwAHADMABwAzAAcAMwAHADMABwAzAAcAMwAHADMABwAzAAcAMwAHADMABwAzAAcAMwAH
ADMABwAzAAcAMwAHADMABwAFAAcABQAHADMABwAzAAcABQAHADMABwAzAAcAMwAHAAcAAgAHAAIA
BwACAAcAAgAHAAIAAAAAAOsYAAA+GQAAgxoAANYaAADYGgAA2RoAAFskAABbJAAAfCQAAIUkAACK
JAAAiiQAAKwkAACzJAAAxSQAAM4kAADTJAAA0yQAAHF2AABxdgAAdHYAAHR2AAB3dgAAd3YAAHp2
AAB6dgAAfXYAAJt2AACidgAArXYAALF2AADAdgAAwXYAAMF2AADCdgAAwnYAAMZ2AAADAAQAAwAE
AAMABAADAAQAAwAEAAMABAADAAcAAwAEAAMABAADAAQAAgAEAAIABAACAAQAAgAEAAIABwACAAcA
AgAEAAIABAACABQAJ1aQC4j7PsT/D/8P/w//D/8P/w//D/8P/w8QAFkp8wuC7jbE/w//D/8P/w//
D/8P/w//D/8PEABbRQYNhOaq4f8P/w//D/8P/w//D/8P/w//DxAAnj5/DwBSZPH/D/8P/w//D/8P
/w//D/8P/w8QABwlVRHoWS6XJwAmAP8P/w//D/8P/w//D/8PEAANLZEUEB9ohP8P/w//D/8P/w//
D/8P/w//DxAAYndpFvpvsJ7/D/8P/w//D/8P/w//D/8P/w8QABBa/xaO8+TSFgD/D/8P/w//D/8P
/w//D/8PEACRaF8eSslWof8P/w//D/8PBQAGAAcACAAJAAAArjttIxr0tJD/D/8P/w//D/8P/w//
D/8P/w8QAMJhCyWUlGAe/w//D/8P/w//D/8P/w//D/8PEADFVccmfHu4gP8P/w//D/8P/w//D/8P
/w//DxAAWwv0S1JkMDwZAP8P/w//D/8P/w//D/8P/w8QAN8gAlC844apFAD/D/8P/w//D/8P/w//
D/8PAQDGWIxQAPHsSwEAAgD/D/8P/w//D/8P/w//DwAASUAuV0JDHkP/D/8P/w//D/8P/w//D/8P
/w8QAM4QUFmqVILa/w//D/8P/w//D/8P/w//D/8PEADnW9RZRh5Wjv8P/w//D/8P/w//D/8P/w//
DxAA4gIncjocukoqAP8P/w//D/8P/w//D/8P/w8QAI0nv36Ker5n/w//D/8P/w//D/8P/w//D/8P
EAABAAAAFxAAAAAAAAAAAAAAaAEAAAAAAAAVEAAAD4SLAxGEmP5ehIsDYISY/k9KAQBRSgEAbygA
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
iEgAAAIABQAuAAEAAAAAkAEAAAAAAAAAAABoAQAAAAAAAAoQAAAPhLATEYSY/l6EsBNghJj+h2gA
AAAAiEgAAAIABgAuAAEAAAAEkAEAAAAAAAAAAABoAQAAAAAAAAoQAAAPhIAWEYSY/l6EgBZghJj+
h2gAAAAAiEgAAAIABwAuAAEAAAACkgEAAAAAAAAAAABoAQAAAAAAAAoQAAAPhFAZEYRM/16EUBlg
hEz/h2gAAAAAiEgAAAIACAAuACUAAADfIAJQAAAAAAAAAAAAAAAAEFr/FgAAAAAAAAAAAAAAAFsL
9EsAAAAAAAAAAAAAAADnW9RZAAAAAAAAAAAAAAAAkWhfHgAAAAAAAAAAAAAAABwlVREAAAAAAAAA
AAAAAADiAidyAAAAAAAAAAAAAAAAW0UGDQAAAAAAAAAAAAAAAElALlcAAAAAAAAAAAAAAABJQC5X
AAAAAAAAAAABAAAAEFr/FgAAAAAAAAAAAAAAABBa/xYAAAAAAAAAAAAAAAAQWv8WAAAAAAAAAAAA
AAAAEFr/FgAAAAAAAAAAAAAAAK47bSMAAAAAAAAAAAAAAACePn8PAAAAAAAAAAAAAAAADS2RFAAA
AAAAAAAAAAAAAMZYjFAAAAAAAAAAAAAAAAAQWv8WAAAAAAAAAAAAAAAAEFr/FgAAAAAAAAAAAAAA
ABBa/xYAAAAAAAAAAAAAAAAQWv8WAAAAAAAAAAAAAAAAEFr/FgAAAAAAAAAAAAAAABBa/xYAAAAA
AAAAAAAAAAAQWv8WAAAAAAAAAAAAAAAAEFr/FgAAAAAAAAAAAAAAABBa/xYAAAAAAAAAAAAAAAAQ
Wv8WAAAAAAAAAAAAAAAAwmELJQAAAAAAAAAAAAAAABwlVREAAAAAAAAAAAAAAAAcJVURAAAAAAAA
AAAAAAAAJ1aQCwAAAAAAAAAAAAAAAM4QUFkAAAAAAAAAAAAAAACNJ79+AAAAAAAAAAAAAAAAYndp
FgAAAAAAAAAAAAAAAMVVxyYAAAAAAAAAAAAAAABZKfMLAAAAAAAAAAAAAAAA////////////////
/////////////////////////////////////wEAAAAQQUEE////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////8VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA//8VAAAAEgABAAkEAwAJBAUACQQBAAkEAwAJBAUACQQBAAkE
AwAJBAUACQQSAAEACQQDAAkEBQAJBAEACQQDAAkEBQAJBAEACQQDAAkEBQAJBBIAAQAJBAMACQQF
AAkEAQAJBAMACQQFAAkEAQAJBAMACQQFAAkEEgAPAAkEGQAJBBsACQQPAAkEGQAJBBsACQQPAAkE
GQAJBBsACQQSAPi75qcDAAkEBQAJBAEACQQDAAkEBQAJBAEACQQDAAkEBQAJBBIAMK2SGhkACQQb
AAkEDwAJBBkACQQbAAkEDwAJBBkACQQbAAkEEgDUfNbcGQAJBBsACQQPAAkEGQAJBBsACQQPAAkE
GQAJBBsACQQSANyyfCsDAAkEBQAJBAEACQQDAAkEBQAJBAEACQQDAAkEBQAJBAAAEgAPAAkEGQAJ
BBsACQQPAAkEGQAJBBsACQQPAAkEGQAJBBsACQQSAA8ACQQZAAkEGwAJBA8ACQQZAAkEGwAJBA8A
CQQZAAkEGwAJBBIADwAJBBkACQQbAAkEDwAJBBkACQQbAAkEDwAJBBkACQQbAAkEAAASAOLFuPkZ
AAkEGwAJBA8ACQQZAAkEGwAJBA8ACQQZAAkEGwAJBAAAEgCmg8AfGQAJBBsACQQPAAkEGQAJBBsA
CQQPAAkEGQAJBBsACQQSAGAaMMQZAAkEGwAJBA8ACQQZAAkEGwAJBA8ACQQZAAkEGwAJBBIAAQAJ
BAMACQQFAAkEAQAJBAMACQQFAAkEAQAJBAMACQQFAAkEEgAWY+bCGQAJBBsACQQPAAkEGQAJBBsA
CQQPAAkEGQAJBBsACQQSAGiFGE4DAAkEBQAJBAEACQQDAAkEBQAJBAEACQQDAAkEBQAJBBIAEr4a
iBkACQQbAAkEDwAJBBkACQQbAAkEDwAJBBkACQQbAAkEAwAAAAMACQQFAAIAQAAAAAkEBgACAEAA
AAAJBAAAAABAAGoBaUWNAFkSK28AAAAAAQAEAPAAAAAHAdsAGnQoYgAAAAADAAgA8AAAAPAAAACI
RuoAVkgbMAAAAAADAAgA8AAAAPAAAABOFR4B3DX8DQAAAAAAAMwvNgFWSBswAAAAAAMACADwAAAA
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
GQCaPBkAGD0ZABZGGQC7RxkA0EoZAE1cGQCTahkAhXAZAHp2GQCieBkAG3sZAH4BGgDNAxoAowka
AFIKGgDDEhoA1hIaAJgYGgA1GxoAIx0aAP0eGgA9NRoAo1caAI9YGgA2WRoAeV4aALFpGgBaahoA
QXwaAHsCGwARAxsARgkbAJsQGwCZERsAPBIbAHQUGwA4FxsABRgbAGMYGwDKIRsARyMbABIvGwDF
VRsAtFkbAPFZGwA6YhsAtWQbABtnGwAJexsA3XwbAEoAHADXBRwAaQwcALwTHADMFhwA7SUcACQ9
HABDTRwAx04cACZPHACiUxwAelUcAIdWHAB1XhwASG8cAFNyHAB4fBwA6AAdAD8OHQDMDx0AwBsd
AMAcHQBVHx0Ayh8dADAhHQBgKR0ASiwdACkuHQDyLx0A+jEdANsyHQBcNx0AhDgdADE5HQDaOR0A
2TodAP0/HQByQB0A8kEdAMBKHQCoUx0Aql4dAL1gHQDWYB0A3WodAG1tHQAHdh0AkXcdALB4HQBI
fB0AAgAeAE8OHgAnDx4AUhkeAIsnHgCJKh4AKC8eALw4HgAqPx4AVUgeAExQHgDCWx4A9F8eAIRo
HgD4ah4AqXceACJ4HgCgCh8Anw8fAFAZHwBtGR8AdCAfACouHwDKNx8AIjgfADtBHwC6TR8A+1Mf
AHtUHwCcVR8AHlsfAMFhHwCmZR8AunIfAIp5HwDGfh8ABQEgAAgFIADyBiAAGAogADANIABWDyAA
iBYgAFkdIACnHSAALi8gAHY9IAAJRiAAYk4gAPFOIADRTyAA3U8gABpQIAAZWSAAa10gAOZfIACd
ZiAAumYgAP1oIABqeSAAnAUhAAEHIQB8DSEAPBAhALwSIQC8GyEA4DAhAEMxIQD4NyEAoEghAE1J
IQDCSSEAoU4hACFRIQBKVCEAY1UhAGdcIQCqYiEAqW0hADMDIgAUCSIA9g0iAFgOIgDDFSIAuxoi
ABAbIgDFHyIAqCAiAG4oIgD7KyIAGS4iABs3IgCfOSIAyj0iAPY9IgAWRCIADEgiADBKIgCYSiIA
sFUiAE1XIgDLYCIAFWQiAEZnIgAObiIADnYiADR5IgD1fyIAvwIjAIsDIwAACCMAZwojAIoOIwDN
DyMAOxUjAD8kIwBTKCMAaS8jAIAzIwBtNiMA6jYjAP06IwB8QCMAgUMjAARFIwDLSSMAA1IjALxv
IwBCciMA13kjAPp9IwDFCCQAPgkkAKsKJABREyQAGRckAJMbJACCHCQApB0kALYeJAAOLiQAZjIk
AFg0JADmNiQAITkkAMk6JABcPyQAVkUkAHJJJAAPVCQANGQkAKlkJAAYZSQANW8kAElyJACeeyQA
EQQlAL4eJQChLCUAN0IlACRHJQCXTCUAvUwlAFABJgA0CCYA0wgmABIOJgC5ISYABjMmABY0JgBr
OiYAtzomALlNJgBDUSYABVwmAMRhJgDhciYAuXQmAM4HJwDWCicA+iMnAFUvJwAZMicAaUMnAOJK
JwCTUCcArVknAMVbJwA9YScAb2UnAGxqJwCGbCcAOm8nABhzJwBseicACnwnAFMDKAA4DygAvRUo
AFsZKADCGygA0x8oACEkKAAjKygAGy0oAKcxKABsMygAsUAoALpDKABsSSgAelMoAJBhKAB1YigA
EXwoAJx9KACtBikAjwwpAMgSKQCFGCkATEcpAMVHKQAETykAcFspAKNkKQD3ZSkAWmgpALdsKQCh
dSkAlnspAC0AKgCMACoAOgMqACILKgCIFSoApRUqANBBKgC+QioA90MqAItEKgDZSyoAZ1cqAIdX
KgCEXioAnmEqAOliKgDEaCoAX2kqAGdpKgDJbSoAdG8qAAdyKgB7cioAg3IqAI8WKwAKIisAOysr
AB0vKwBNLysAPzIrACA0KwDvPSsAY0IrAFxDKwC/SSsAbUsrAJZSKwCJUysAKVcrACFZKwBBWysA
BFwrAEFfKwDCYSsA0GYrAA1wKwDFdysAO3krAO95KwDReysAHAMsAGgQLACxECwAcCQsAPYoLACF
LiwA5zEsAIMzLAA2NiwAHFUsAEpXLABcWSwAIGEsAIRmLADhbSwAPXAsAEh4LACaAC0AGgctADgM
LQCJDS0AghEtAIcaLQCrGi0AjUItAJNOLQC4Ui0A51otANBcLQBJZi0Aq2gtAE9uLQBacS0AgXwt
AN0GLgBwBy4A8A0uAN4TLgBBFC4A2hcuAE4yLgBENC4AdjguAOI+LgC7Py4AYEAuAKFFLgBbRy4A
j0cuAHVJLgCdSy4AylYuAFdYLgD6XS4AwV8uAMhnLgB3bi4AaHIuAN9/LgBOAi8AmQQvAFoLLwDa
Di8AahAvAFkXLwCaGy8A3B4vALsmLwAzKC8AXCovAHAsLwCbNi8A8jsvAEhHLwCISS8AjkwvAA9P
LwArXC8A6mAvADtmLwDXZi8AymcvANpnLwDcaC8AT2kvAJ5tLwAPby8ANHAvANN0LwAWdy8AM3ov
ALEBMADTAjAAMhMwAC0ZMAADGjAAhigwABEpMAAZQjAAakQwAC9MMACpTTAAu00wAJ5TMABQWzAA
L2IwAKFiMAATZjAAhQUxAK8WMQDiFjEAoRwxAGodMQCfHzEAwCUxACYsMQCYNjEAL04xANxWMQAi
WjEA5WUxAF1mMQCiZjEApWgxACtvMQAdcTEAV3MxAH1+MQDJfzEAmw4yABwUMgBjFDIAfxYyAOIZ
MgDUHDIA7SEyAOgiMgB6KzIAcTwyAEhLMgCfSzIAsV8yAH9jMgDwbjIAd3AyAMd0MgAcdzIAR30y
ADYDMwCJAzMAZQ8zANUQMwBcHTMA5SUzAHUzMwDFNTMA/jkzAAk7MwA9SDMAtFAzAEBYMwAuXjMA
Y2EzAAdiMwC+ZjMApG8zAJF3MwCwBjQABwg0ABMSNABJFTQA9hc0ABQaNACXHDQATx40AGIeNADM
HzQAxiM0AIwmNADlLTQAdjE0AIYyNAD5NDQAiDk0AIc+NAAcQjQAvEY0ALhLNADiTzQA4lM0AAVe
NADDYjQA/Wk0APFrNAAFcTQAV3c0AEUBNQBOAjUAdwo1AJMONQCeEDUAVBU1AGMZNQBLHjUAOiA1
AFIhNQAlJzUA/Ss1AJMwNQB0RzUAa0k1ACtONQApTzUAHVE1AOpdNQCkYDUAnmI1AEZoNQBTcTUA
xwM2AKsSNgAAFDYA8BU2AGg5NgAxOzYAfEI2AIZDNgBYRTYAwE02ABpaNgA3ajYAQXI2AB8ANwBI
AjcAbgQ3ALkJNwCOFDcAEhc3AO4gNwBIJDcArSQ3AMwlNwDpKzcAUjU3ACM3NwB5PzcAJUA3AOpJ
NwAdTDcAvE43AKtRNwBdWTcAKm03AGpxNwD6cTcAUXU3AFx5NwB7AzgAnQw4AFoSOADgGzgAFB04
AM8lOABZJjgA2Cs4AOArOABGLjgAuTM4AKU3OAAhOTgA9kc4AM9TOABsYTgA5mk4ABpqOACBazgA
Lm44AKICOQDnBjkAEAs5ACkPOQALFDkAkhw5AO0iOQAXJDkAHjA5AMA0OQDrOjkAvjw5AFY/OQDv
QDkAwkQ5AFJFOQDQRjkAqEg5AJRYOQCsXDkAmWM5ADBkOQDBZzkAxmo5ADl1OQApAjoAhAg6AL0Q
OgBgEToADiA6ABkvOgDyQzoA31o6APNhOgCcZjoAwm06AId8OgAIAzsA0xU7AAUhOwA5ITsAfCg7
AJMoOwAdLzsAADI7AM8yOwD6MjsAxDU7ADA8OwA7RTsAvkw7AC9TOwBoVTsA3FY7AEBfOwAmZDsA
uGg7ALN7OwACfzsApH87AOIEPABfBjwAYgY8AFAHPACuDzwAqBM8AA0bPACfHTwAUyM8AMs4PADR
PDwADEE8ADFBPAC7RzwA6Uk8AJlSPAAHWTwAiGY8AMVmPAD9bzwAOnQ8AKYAPQCGBT0APwY9ABQH
PQAqDz0AxhA9AO0dPQDBHj0A4ik9AGoqPQDxMj0AR0M9AHdHPQBwST0AY0s9AGJQPQCoUj0A11I9
AOZYPQAcWz0Az149AJtiPQDhYz0AUmY9AEtpPQA3az0AH3A9AHdxPQDPcT0A/HI9AP55PQArfj0A
4gc+AJcOPgCGEz4A0xU+AKwYPgC1GD4AaCU+ADYmPgALLT4Azy4+AKozPgCQOD4Awj4+ANxHPgDf
Tj4A1k8+AClePgAOaD4ANGw+ADIBPwAIAj8AIgg/AHALPwCiED8A3hw/ABYgPwBwIz8A/yU/ALMz
PwDEQD8AWUM/AD5EPwAyRT8ANkY/AGdfPwC2YD8ALG0/AJNyPwA7dD8A3XQ/APt3PwChej8AdgdA
ALcIQAA6IEAApitAAOAxQADHM0AAcjhAAMQ6QAACQkAAcEZAABNLQAA6U0AAh1NAAG1YQADqZEAA
CWdAAOVpQACbb0AAPHlAAAR8QAC8AEEAFwFBAD0VQQD7FkEAPyBBAFQpQQBDKkEAZipBAKErQQDp
MEEAXzZBAHg4QQDAP0EAzz9BAEdGQQA0SEEAeUpBAHhNQQDoTkEAelBBAABSQQB2WEEAJFxBANpl
QQC5bEEAiW9BAN1xQQDsdkEAbn5BAOABQgB1FkIAHhdCAH8YQgBDGUIA4yhCAM0xQgBWMkIAlD9C
AAhCQgC6TkIAalVCAL5VQgByV0IAeVlCANlZQgCeYkIAQ2tCAChtQgCNcUIAmHFCAB90QgAcCkMA
zhFDAOITQwDbKkMA/CxDAOgvQwBVNUMArzVDAJE6QwCSREMAKUZDAO9JQwD3SkMASUtDAAtPQwBt
UEMAaFNDADhbQwALXUMAkWFDAFNxQwDad0MAj3lDAAQERAC6B0QAwBlEAAswRABlOkQAJjxEAFZB
RAA4RkQAukdEAB1bRABLXkQA2mBEAN1jRAAgdkQAfndEAN1/RAC4AEUAZghFAMgRRQAXHkUAmyNF
AOsqRQA1LkUATy5FAGkuRQBgMEUACDFFANE1RQAQSUUA9U1FAFBORQDLTkUAZ1NFABpYRQCBYEUA
mmVFABlqRQB8bkUA/HNFABN/RQBAAUYAewNGANYFRgDaCEYANAlGALAMRgBkFEYAViJGAAYlRgAx
JUYAgC9GAJ4wRgBHMUYAmjFGAOo/RgDhQ0YAcEZGAHZMRgClTkYArU5GAO5VRgARWUYAu2FGAHdo
RgB9aUYADG1GABl5RgAOekYAd3pGAO58RgD7AUcAPgxHAKsPRwAQEUcAvhJHAF0URwBNHEcAASdH
AJgoRwBdLEcAPS9HAK00RwAhNUcAKTdHAGhIRwBwXkcAhF9HACBpRwCycUcAYQlIAN0MSAD6EkgA
DBtIAI4cSABUHUgAsh9IAEEmSACwMEgAcTlIAPs7SACxUkgA9FtIAMVcSAAYYEgASGpIAFdwSACP
c0gAfnxIAKl9SAAOfkgAngFJALsESQBREUkAnhZJANcbSQDHK0kA2jBJAMNJSQCGV0kAj1dJAMFY
SQB9YEkAQmJJAI1uSQDUckkA7XlJALV8SQCJAEoAzAJKAHIMSgBOE0oAiRZKAK4cSgDrH0oAQD1K
AEdESgAHV0oA+l1KAFFiSgCgYkoAzGZKAOhoSgBrbEoASXdKAAh6SgDBfUoArABLAFYKSwD1EUsA
3iNLAE4kSwDtKEsANDJLAFY1SwDVNUsA+DpLAL9BSwDOQ0sA70NLABpFSwCPR0sAcUlLANRbSwAm
X0sAz2VLAMpqSwBGa0sA+G9LAC53SwBsAUwAbQVMAK0FTACWCUwA3gxMABMUTADYF0wA2RhMAM8j
TACZJEwAQihMAP4pTABUNEwAsThMAJg9TABGRkwAnE5MABFfTADBYUwAiWRMAMRkTACgaUwA3XFM
AEh4TADUeEwAintMAAV9TAC2BE0ApAdNAP0HTQApC00ABxBNAAEVTQCyHU0ADiNNAGwkTQAFJk0A
eCpNAAUvTQB5PE0ANEdNAAFITQAKTk0ADk5NAK5dTQCoYU0A92ZNAGBpTQD/cE0AHXFNAG94TQAw
ek0A031NADgHTgCHDE4ArRdOABshTgCKIk4ATihOAO8rTgCeNk4AmkdOADVKTgBpUU4AjWJOAKRq
TgALa04ATHROAMZ0TgCsdU4ABQVPAO8nTwAfLU8AMS5PACM0TwCjNU8AvjxPAH1HTwDpSk8AoUtP
AJRMTwCWUU8AC1RPAPJtTwD1fE8AdwpQANAXUAA7G1AAXhxQADoeUADnJVAA9jJQABBCUAB0RFAA
dUdQAJFHUADGR1AArUlQAGdNUACvT1AARVhQABxhUACsZFAAJndQABd6UABdelAA5nxQANcOUQDA
EFEA6hBRAE4VUQAtGFEA3CNRAPEoUQDJKVEAkzBRAAxBUQADRlEAn0dRADxaUQBrZFEAa2hRACl0
UQBqBFIAnAZSAIsJUgAkEFIAsBJSAEcVUgACFlIAnRZSACsfUgC3IVIAmCRSAEQsUgBCLlIAL0BS
AIVBUgAoQlIAg1BSALZTUgB+WFIAJltSAJ9dUgDIdVIAGAFTAPQCUwA4CFMA7w1TAOoXUwAxG1MA
ZiBTAPsiUwDMKlMAZTBTABczUwCrPlMA/EFTANdTUwBGZlMATHdTABoDVACgCVQAFhVUAF4WVADo
I1QAXS1UAGAvVABRO1QAdTtUAAI8VADYQlQACUZUAB5IVAAGSlQAC0pUACNKVAADT1QA409UAI5S
VAD6UlQA9mlUAJduVADMc1QAVAtVAK4ZVQAvJVUAMS1VAM0uVQApL1UAazVVAOk1VQCxPVUAokVV
AKlnVQABc1UA73pVAF8HVgCqCFYAjhJWAOInVgAHKFYApihWAL0qVgCGK1YAjytWALgxVgDFQlYA
L1NWANteVgChYFYAnGpWAFpyVgBndFYAcnRWAF0DVwD5CVcAhgxXANYdVwAHJVcAoSxXACczVwCn
N1cAdDpXAFs8VwC7PFcAzj9XAPFDVwAGVFcAflRXADdfVwD7ZFcAGGpXAMl1VwDTdVcAdXlXANh/
VwA3AFgAJRZYAPwYWAALG1gAThxYAFQiWADAI1gAtSVYAJ4pWAAPK1gAbTZYAOU2WABKOVgAlj5Y
AOdMWAD/V1gAjlxYAKVdWABdXlgA3GFYABRjWACnbVgAuW9YAAt2WADSdlgAxXxYADIFWQAwD1kA
fRBZAIIQWQChHlkANyFZAFwpWQAiKlkAOTBZAA43WQAAOFkAOjtZADJEWQCgRFkAhUZZAFNHWQBC
SlkA6EpZAFNQWQDkVFkAZltZAONdWQBLZ1kAQ2pZAM98WQANAVoA0A5aACQQWgBfGloACxtaABQo
WgDQMloAslRaANhdWgDrY1oAYHVaAGx/WgDoClsAdA5bAOYTWwAuGVsAyidbAI8oWwCIK1sAGjBb
AKJAWwBmQVsAyEJbAI5GWwB7TFsA4E1bAGhSWwA2VVsAlFhbADZcWwBrXFsAoGNbAJpmWwDLZ1sA
wW9bAIV1WwBjd1sAvwNcAMYMXAAjFlwAFCBcACooXACRKFwAvihcACpHXAAHSFwA6kxcAGdcXAD9
XFwAgW1cAMxyXACBdVwAcgJdAAMDXQAhA10AsRldAHsaXQDVH10AXCVdAFYwXQDNNF0AODVdANw1
XQDrRV0A2kZdANBNXQBqUF0AtlJdABBTXQDuU10AxlVdAEhYXQBkX10AcmBdADFiXQCybl0AaX9d
AMh/XQBLAV4ARw1eAKIOXgD4Dl4AWA9eAIQQXgCDGF4A6x1eAAomXgA8Jl4ASDBeALMxXgBpNl4A
xD5eADtCXgAkR14AVkleADNOXgA2V14AIFheAExoXgC/aV4Af21eAE4BXwB1B18AnhVfANosXwD3
L18ACzRfALM4XwC2PF8AH0BfAKBGXwAVR18A1UhfAEtMXwBLZl8Ag2lfADZqXwAKa18ADG9fAHBz
XwCXdV8A/nZfAMh4XwAIeV8A8XxfADMJYAAvDmAAvBJgAFojYAANKmAA2TNgAJs1YABHQmAAIEZg
AAlIYAA7SWAAK05gAAJQYACnV2AAHFpgAG1cYAAeX2AA42BgAFttYACUAGEALBdhAFkZYQDGHGEA
iyZhAPkoYQDRNmEAQj1hALo9YQDnQWEAvEJhAABHYQBRSmEAzU9hALBUYQCFaGEAVHNhAOh1YQD5
dWEAbnZhAHR2YQDqd2EAEH1hAAYIYgBBDmIAuBNiAG0gYgD5JmIA4idiAOQtYgAALmIARjBiAEAy
YgD4MmIABTdiAEVAYgBUS2IAY0xiAJdMYgBAT2IAbE9iAMpVYgDuXWIAIGNiAPxqYgC5bGIAWwNj
ACoEYwDlCGMAcBtjAMknYwCuKGMAgSljALwqYwBQLmMAfS5jAMwuYwBNO2MAZURjAGZWYwAyXWMA
S15jAEdwYwCGcWMA4nJjAJx9YwAXAGQAUApkAPgcZAAMJWQAiTJkAGc4ZAAyQ2QAMEZkAIhQZACr
U2QARVRkAPRZZABxYWQAc2NkAG9sZADwcmQA83RkABh2ZAAdBmUAdQdlAPcHZQC+EGUAgxNlAHYY
ZQA8HGUA7BxlABEmZQCVLGUAoS5lAEoxZQCoMmUAJTNlAAg2ZQDGOGUA7T5lANRCZQC1R2UAS0hl
ABtRZQBMU2UAlFNlAKlWZQAPWmUAZXBlAAlzZQDwdmUA8n9lAPEFZgA5CGYAlgxmAHsaZgDCHGYA
ex1mAI4dZgCYKGYAaCpmAHIqZgCcOmYARD5mAPtFZgBzRmYA5UtmAOlMZgDdUWYA71VmACphZgBX
aGYA83RmANJ1ZgAseWYAcwpnAI4KZwDqEmcAJRNnAJIXZwC3F2cA6j9nAO4/ZwAnV2cAO1lnAPZh
ZwDoZmcAT2dnALBtZwCxb2cAe3lnAKR5ZwBefmcAmwhoAKYYaAB4GWgAzhtoAHAfaADrH2gAMS1o
AJgvaADwNGgADU9oAIZfaAB0ZWgA02hoAH4HaQC6GWkAZDBpADw0aQCNOmkALzxpAJFNaQCnV2kA
5ldpAOd4aQC+AWoAlCNqAPEkagC9JmoA3itqAKstagBFLmoA0jNqAHw1agBrO2oAUEZqAJVLagCo
UGoA8VNqAClfagASZmoAanJqAHJyagAUfGoAYnxqAMV8agBWEWsAjiNrAKckawBnJmsAbidrAAk1
awB0TWsABlRrAGBVawAVWGsA0FhrAFhnawCccGsA7XdrAMwObADNEmwA1xxsAMIhbADCJWwAEihs
APgtbAApLmwA/zZsANpAbADnQWwA7UFsAE5HbAC1TGwAuFBsAH1VbABlV2wACGBsAEd4bAA6fGwA
IH9sAOB/bAAGCG0A9A1tAO0TbQANHm0ALCRtAJMkbQCjJm0ADyhtAFMobQA7LW0AiC1tAN4zbQAL
Nm0AeDZtAK46bQA2Tm0A3VltAPplbQAAZm0AB2ptAJNqbQDjbG0AZG1tALJvbQCAe20AGn1tAJ8R
bgAvFm4AJRhuAMIdbgDyHm4AXiJuAMAibgAHJW4AlCduAMovbgACOW4A/kpuAJlSbgBhW24A12Nu
AGppbgA/eW4A6XluAF4AbwBbBm8AsQ9vAL0cbwDbHG8A2zFvAG4ybwCLM28AJDxvAE5HbwADSm8A
PUxvAL9VbwASZG8ACmZvAJxobwDBfm8AFQFwAFIDcACbBXAAbwlwACMVcADQFnAALiJwAOgjcAC/
JXAAaCpwAA82cADLO3AA6UBwAGZEcAAqRnAAnEhwANRNcADVTnAARFhwAOFmcACXa3AA/2xwAFZu
cACldHAAaXVwAHMAcQA1CXEAJRFxAE8ScQAWGHEA2BhxAA4gcQDcIHEA/yNxAAU+cQCxRXEAtkdx
AGBUcQCSWXEAU1pxALhbcQAvYXEACmtxAApucQCEc3EA2X9xAAkAcgA0HnIAEiByACkicgCOJ3IA
kityAH01cgB7O3IAUEByAP5DcgDfSHIAOUlyAL9KcgANVnIAYVpyAFNecgCcYHIAe2FyAE9qcgBR
bXIARnRyAMt4cgB1f3IAigVzAKYJcwA+FXMAoRVzADsbcwAhKHMAIC1zAMgzcwDuNHMAzEtzAAVQ
cwB+UHMAvlBzAPpRcwCxU3MA2FpzANpmcwAEanMAimpzAF5rcwAcBHQA2gV0ACYNdADFFHQA3BR0
ABIYdADOGXQAbxt0AHwcdADmHHQAWCh0AOg9dADEPnQAxUN0AF9FdACLSXQAoFJ0AFlbdADvX3QA
wWR0AO1qdAAwbHQAUW10AAF2dAATeXQAXAN1AN0EdQACBnUATwZ1ABcHdQArCnUAegx1ALkUdQA3
GHUAmxt1AHwmdQA0LnUA4jN1ANdIdQAhWHUAfGJ1AJIAdgCEBnYAMxJ2AAkbdgDHG3YAXxx2AEEu
dgDjPXYAHUV2AKZGdgBCSXYAelB2ANFbdgDsYXYAqGJ2AGRmdgBmZnYA52d2ANRtdgDidXYAhwZ3
AFMRdwBZFXcAjCB3AH0odwAgNHcAbTR3AAE5dwD9O3cATEJ3AP1DdwC/UXcATFJ3AORSdwCqbHcA
oW13AHN4dwDFencA/nx3AEsAeAB7DHgAUBx4ABgjeADxJngA1C94AH4xeACGNngApD94AE5GeACM
SngAhFR4AE1WeACQV3gA7lt4AOJceABqXXgALmh4AGBpeADBbHgA73F4AP51eAAJeHgAxn54AB4X
eQCtGXkAdB15AB0seQBlLXkAkTZ5AKo5eQA6THkA8k15AHFPeQAuVXkAyFl5AOR4eQBJeXkASnp5
AI0AegBUB3oAygp6AL4begCgHXoA5B56AG8regAoLHoAcS16ALwwegAvNnoAgD56AKVKegCWVHoA
OFZ6AJ5WegBSZHoAhmR6AKZpegDxdHoAKHx6AAwDewDBB3sAcgl7AHcNewBPDnsAqhF7AFUXewCJ
GHsA/xl7ADgdewAeKXsAxjJ7AOU2ewB/OnsAB0F7AH9IewAUVHsAJll7ADtcewCbXXsAJ3B7AEoD
fADYBXwAQwd8ADgKfAANDXwAIR18AIkdfACiJnwAPSh8AP4qfAAIL3wAbzJ8AOIzfAAJRHwAsE98
AEpVfADtVnwAxVd8AIdbfADwaHwAZW58AEZ2fADPAH0AigR9AIkJfQA+DX0AUA99AAETfQDfGX0A
HyZ9AE0ufQCJLn0ARjB9AP8xfQDEMn0AXjN9AC40fQBFPn0AzUF9ACJLfQAKU30AQlN9AIlbfQCS
XX0AWWh9APBofQAya30AtXp9AEJ8fQDHfX0A+QZ+AAwJfgBhHX4A/iF+ANU1fgCmPX4AYD5+AChN
fgB7T34A5lN+ALlWfgA/Y34AWmd+APBrfgD4b34A9AJ/AC8PfwA3F38A7Rh/AHkdfwCMJX8AhCt/
ACgwfwCpNn8A7Dp/ACQ7fwCHQX8AQUR/APpHfwCbWH8AwFh/AC9cfwB9YH8AvGJ/AFlkfwC0Zn8A
Dml/ABdpfwDIbH8ABW9/ACh0fwBndn8Az3d/AJADgAAgBYAA6QqAAEISgAD2EoAA8B+AAJ0igACM
MIAARjSAACM9gADrQIAA7kuAAIRRgACDU4AAaGiAAFJrgAB/dIAANgSBAHwlgQB0KoEAz06BABBW
gQA6YYEAxWKBAHJogQAZcYEALnKBAFtzgQDZdYEAbQWCAKMFggBeBoIAwgaCADgTggCIFoIAEiCC
AMIlggDpLIIAMy2CAJ0tggANMIIAtjGCAKAzggBKRIIAk0eCADZPggCGU4IAVV+CAJFfggDMaoIA
42yCADt2ggDGd4IAa3iCAOVJgwBsS4MAoUuDAEtRgwCgUYMA61GDAMxXgwCBYIMA92iDAHpqgwD0
aoMARG+DAIZygwDBdIMAjXqDAAh7gwCfAIQA5wKEAAgEhADaBoQAKBKEACgZhABEGYQAVRqEAHkc
hAD9I4QAqi2EAK0xhACdOoQARjyEAC49hADCQoQAnEOEAPFThADuV4QA51qEAD9dhABHZoQAcnWE
AOZ2hADLe4QAAACFAH4QhQAvF4UAbRqFAPQahQCOLYUAoS+FAAExhQC9N4UAoDiFAHI9hQCcPYUA
w0KFAMxDhQDQRIUAY0WFAE5IhQDxToUA61OFADFVhQDWV4UAH1yFACllhQAtZoUANmiFAAxuhQDN
dYUA83mFAKwGhgAfCIYAuw2GAD8PhgDKEIYAOxGGAMAShgCTFYYAUReGALwchgAuH4YAGCKGAD8k
hgAlNYYAgUOGAKRThgAPVIYAnlWGAPJYhgC7XYYAXGKGADNphgDre4YAiXyGAHx9hgAcJIcAFieH
ALonhwBaK4cAlyyHAMcshwCuNYcAhT+HAFxBhwC+U4cAVFWHAPVihwDyZ4cAZG2HAO9yhwCMeIcA
oBCIAF8TiAAFGogAyBqIANAtiABdLogABkOIAN5RiAAJWYgAgF+IAJ93iAAXfYgAr3+IAMIJiQBb
DokAKROJAEciiQBBJIkAICeJAHcniQDDLIkAlTSJAIM1iQC5N4kAJDqJAII/iQDRSokAn0uJAG1V
iQAZWIkAY1qJABRgiQD7ZIkARmaJAAloiQABaokA3GuJAKhwiQBSdIkAynSJAJZ1iQBueokAZX6J
AJF/iQDvCooARQyKAA4QigCnE4oA7hOKAOAZigDGG4oAKimKAEEqigB8MooA/kiKAPhUigCuWYoA
9FmKAHJdigDta4oAbG6KAJZvigAacooAkHiKAIx5igAKe4oAKn+KAHkCiwCiBosA/gyLAMIPiwBM
F4sAwB2LAB8iiwDZIosA5SqLAJ0wiwCmMosA2DKLAD46iwByPIsATkSLAOdSiwC+YosAGHSLAK94
iwAofIsAtAKMAFcHjADwB4wA8AyMAGsRjADqG4wADx6MAJUejADbHowABR+MAIQsjACOLowAnDSM
APQ2jAB6P4wAb0GMAORmjAAxdowAEX6MAMd+jAD5BI0A3g2NANcSjQCIGo0A+hqNAMEijQDPJY0A
IjCNAK8yjQBwOo0AeDqNAIc7jQDDPI0AU0SNAGtWjQDyVo0AJF+NAF5fjQBHY40AQGSNAO1mjQAz
cY0A23ONAPd7jQD8CY4ApAqOAAoLjgBzC44A7w2OALUSjgAYF44AWhqOAJoejgCEIo4A7CuOABE1
jgBRQY4AvkGOAP5BjgCQR44AuEyOAB1SjgAgVY4A+1aOAJxfjgAWZY4AX2iOAJJqjgDFao4Axm6O
ADpvjgD5b44A83SOAOh1jgB8A48AOwqPANwRjwDLII8AIiqPADQwjwCjMY8AODiPALQ4jwBJRY8A
SkWPACdSjwCYVI8A5V+PAPZmjwBeaY8A8nGPAPZzjwD2dI8Ao3mPAG19jwDkf48A9AWQAKkIkAAw
D5AArBSQAHAVkABiFpAA4yGQAIcjkABQJ5AALCuQAAQukAAJMZAAvDKQAHVDkAD/R5AAs1SQAGBZ
kADRaZAAE2qQAHFtkAA2dZAAx3iQAAoAkQCiA5EAfgSRABcFkQB9B5EAVA2RANEPkQC/FJEAwyeR
ACU6kQDwOpEAND+RAJREkQDxRJEA81CRAExUkQAnZZEAgW2RAN1ukQDucJEAMXGRALN1kQABeJEA
BXmRAK0CkgBBEJIA/RKSABUUkgB1FJIAsiGSAN4ikgBSK5IApEaSAI5HkgBqS5IApVGSAFJXkgB7
ZJIAiHiSAIh6kgD3fZIACwGTAPYEkwDpFZMA+CaTAGUwkwAqPZMAEkKTAGVCkwC9SpMAbU2TAIBR
kwDRVpMAh12TAE5fkwBRc5MAuwaUAI0LlACrEpQAZxmUAJYZlAB3GpQAuh+UAM4mlACpOZQALT2U
AIU9lAA5PpQAoE6UADxRlAC3bZQAYHmUAOV7lACFBJUApBCVAOIalQDMJJUA7ziVAPM5lQBvW5UA
vVyVADBflQByYJUA9WSVABZtlQDgepUAVHyVANB+lQAuB5YAGAuWAE0PlgCLD5YAQRCWAMsWlgAe
GpYA+yCWAAQmlgC3JpYAiyeWAMc4lgAiP5YApkGWAMhBlgALSJYAq0uWADtOlgCOVJYAJlmWAEZj
lgBLY5YAQ2SWAIBmlgAuc5YAkXuWADAKlwDtCpcAFBCXAAoYlwC7GpcAESOXAFsplwAaK5cAhS+X
AKQ7lwBMP5cAvkCXAA9DlwByV5cAzl+XAGJilwBXZZcAbmiXAH5plwCrapcAbWyXABNulwATcpcA
2XSXAIF5lwAdA5gAFgSYAJEKmACgDpgAdRaYAJMmmAAML5gAj0eYAPxYmAChWpgA2GSYAMJmmAB/
cJgAEnWYAPN+mAC/f5gAjQWZAKkRmQBaFZkAqS2ZABQ0mQAsNZkAbjeZAIE4mQDwOpkA8j6ZAMNO
mQCHUZkAtlOZABZXmQARZJkAjGeZAEZpmQDlb5kAiHaZANB5mQCKEpoAfBOaALoUmgDkFZoAESOa
ADwkmgDWJ5oA4C+aAN5JmgATdZoAs3WaANF8mgA8CZsAywqbAJkLmwA5EpsA5RabAMgZmwA1I5sA
pyObANQmmwA1KJsAUS+bABkxmwCSPZsAbUabAFVHmwDVSJsAf0mbAERVmwBDZJsAvHubAIt8mwAw
ApwA1wScALEPnAApIJwAaSKcAF0jnADfMJwAFjecABg5nADOPpwAu0WcAFhHnADUR5wAiUqcAJRM
nABbTpwASVScAIddnACSb5wAaAKdABwDnQBMEp0AuhOdABYZnQC5I50AECSdADYunQAjMZ0ATjGd
AM83nQCXRZ0ALkydAJRdnQCDXp0AwGGdADZsnQBVcZ0AhXSdADR5nQCBfJ0AN32dAKoEngB9B54A
NwmeAAELngCCEJ4A7RWeAFIWngDBGp4AyxyeACskngBFLZ4AujCeAL45ngAQPJ4AgjyeACs9ngBN
TZ4AUk6eABVPngD6U54AA2qeAO1rngD1bJ4Af26eAPF0ngCfeJ4ADHqeAGZ8ngCXfZ4A5wSfAGMf
nwCYIp8A1iWfAG4nnwC3K58ANzSfANc1nwD9N58AT0CfAHlEnwBeSZ8AZ0mfAH9KnwCbU58AeFef
ACRYnwDKY58AQWSfAPplnwDaZ58A+XCfAJN1nwA3dp8AH3efAG56nwARAqAApQqgAB8MoAAXDaAA
bhagAGEfoACIIaAA7UegALBLoAAHWKAAj1mgAH9hoAC+YqAAxGWgALlqoABBbKAARHigACR6oABN
AaEAzAKhABUJoQARJKEALyyhALxDoQALRaEAB0ehAN9HoQCkTqEAlk+hADlboQDyXaEAEmOhANFj
oQCnbaEAE3uhANp/oQD9B6IA8xCiAE8bogA8LKIAxC6iAAg1ogAqQaIAxEiiADhWogB8WKIAPFqi
ACViogBnYqIAsmOiABJkogCCaKIAn2+iAB1wogC7c6IAL3uiAAIKowBeD6MAhg+jANcVowAqF6MA
LRejAMQbowBDLqMAEjWjAD04owDlPaMAqUmjAN5JowBfU6MA+lqjAHN9owCMCqQAbhSkAEAWpADs
HqQAGiKkAH8ppADHLKQA2yykAB8upABmMKQAjD+kAIFBpADeRaQAz06kAFZQpACwYKQA/nikACcM
pQAiEKUAlRGlAHITpQBpFKUAuhSlACQdpQB5IaUAczGlAK8ypQBKOqUAdEalAPNNpQBWVKUAHVyl
APBcpQCMYKUAs2ClAI1kpQAHcaUA33alAPt3pQDrAKYABgymAD8OpgArFaYAQBamAJ0WpgBEH6YA
NSWmAK03pgCYOKYAHj6mAHY/pgA2RqYALlOmAA9dpgAKYqYAaWSmAMdkpgDnaaYAY22mALdupgBL
eaYAh3mmACt+pgC5IKcA0SGnAPghpwApIqcApSqnAH4upwArL6cAkTKnABM1pwAeOqcAJDynAKNF
pwBoRqcAcE2nAK5RpwD4W6cAKmKnAORwpwBcfacAvX6nAKkEqAB8H6gA8x+oAGEgqACYIagADiKo
ALIkqACXK6gAez2oAMpFqACBT6gA1FGoAPNVqAAHV6gAK1moAIpeqABtaKgAI2qoAAdrqAC5b6gA
H3eoAGx3qAAteagAqAypANYoqQDRLKkAADWpAChGqQBgR6kAn0mpALtKqQCdWKkAOWapAFprqQAk
bqkATnCpAMdwqQBfdakA0HupANQLqgCJDqoARhaqAKscqgDrHaoAOiGqAC4lqgBXKaoAQSqqAAAr
qgCBPKoAZlaqAGBtqgBtbqoAFm+qAJ5zqgAndKoAzXiqAGwCqwCIKKsA9TarAA49qwBvP6sAIECr
AN1MqwAxVasAoV+rACtjqwCyaKsAj3KrAExzqwDXdKsAfHWrAMh/qwDSB6wAMQmsALUTrABCFawA
DBesAGgXrACoGKwAUCCsAAAhrACtKqwA/i2sAPZFrADVSqwAlVGsAP5drAAsXqwAEXOsACV4rACU
eKwAh32sALZ+rAAEAK0ABAWtAHkFrQC4E60AfSGtADUlrQAXJq0AeietAJQqrQB+La0A2zitAJY9
rQA6Qa0ArUOtAJFIrQBjTa0AU1GtAMZTrQCvVq0ATV2tAD9prQDObK0AO2+tAK4ArgA1Ba4Aiwuu
AH4MrgBbE64ADhiuAJodrgD1Ia4ASiKuADclrgAFKK4ArimuAAsqrgAiLq4AWDiuALlDrgAARq4A
BEauAEZJrgBkSq4A3kuuAAVOrgD/Tq4ADE+uADZUrgDHVK4Av1euACZprgACb64AzXCuAKdxrgBD
eK4AYA6vAJ8YrwAzIK8AhiKvAHkjrwCkKa8Au0KvAOxLrwBoTq8Aj1CvAOVRrwC7VK8AIVevAGBc
rwCAaq8A4XGvAPhzrwDTeK8A4w6wAB0csADHH7AAJCWwAHInsACROrAAYDuwAH07sAC6PrAAZkSw
AIVQsAAcUrAAz1OwAA5isAB/aLAAQWuwAEttsACGbbAAeXKwAE0EsQAgCbEA6BCxANsqsQBTObEA
Rj+xAHhEsQDlXbEAcl6xACBgsQCOa7EAvG2xADtzsQBOdLEALweyACkJsgD3C7IAqBWyAJAasgCc
HrIAJiGyAMYqsgAgOLIAIzqyABs/sgBuQLIAJUeyAH1NsgAZTrIAwU+yAHRbsgCRX7IA2GCyAIpn
sgD9Z7IAPgKzAA8VswA3FbMALxqzAHcdswBVJLMAji+zALI2swClO7MAvEWzAJJQswBxUrMAzVKz
ALReswB0ZLMA12SzAEJmswBdaLMAV3+zAO8AtABGA7QAyQi0AF4LtACpEbQAeBW0AHsZtADnGrQA
WCK0AGsitAClJrQAqS60AO41tABDO7QAcD20AJFJtAD2SrQAnWC0APJjtAALZ7QANWq0AEJutAC/
brQA5G60ABRvtABhd7QAqne0AL94tAAye7QAu320AOd+tACPA7UAOAu1AEYXtQCSGLUAvhy1ALAf
tQBBLrUAXTa1ALZLtQDgTrUAVk+1ACVTtQBAVrUAklm1ADBatQCuW7UAul61APZftQB2ZLUA92W1
ALlqtQDKd7UAUXq1AAgDtgA5DrYAYhy2AGIhtgBWIrYAaiO2AAIstgAeL7YALja2ADI4tgAoObYA
h0C2APdItgDFSbYAVVi2APFftgBFY7YAs2W2ALFutgB6c7YAlQu3AB4btwDIHrcAdTu3ADs9twBq
QLcA6kW3APtGtwBDTrcAPVK3AKZYtwBaWbcA2lu3ABtitwB5ZLcAQGm3AK9wtwCwAbgAoge4ANAI
uAByELgATRO4AKUcuADxHbgA9yO4AF4wuAATNrgAyDq4ALw/uAA9QLgAyUK4ACRIuAAlVLgANlW4
ALNWuAADXbgA22K4AJ1juACDZ7gA9G64ANJ1uAB0e7gAkwO5AC4PuQBFFrkAhRm5AFgsuQAIMLkA
pDK5AEAzuQALObkAvTm5AOk+uQD5SbkAw1O5ALdeuQDGaLkAZ3G5AI90uQCmd7kAJX25AOJ9uQBL
CLoAhgm6ABMPugAMFroARR66AAIuugCxMLoAfTG6AFgzugBpN7oAdji6AJtDugBFSroAok66APNP
ugBKUboAGWW6AOJmugBna7oA1m66AFBvugD1cboAwHK6AAh0ugAyeLoAHnq6AJ19ugD6froAzwO7
AH8JuwCrDrsAFxS7ADQhuwCrI7sAZya7AOUsuwAbPbsAkkO7AJZJuwDlV7sANGC7APJxuwA8e7sA
5gG8AJ8CvADjBLwASAa8AEoHvACKDLwAvxi8AKAavACiHbwA3iq8AI0vvAALMLwAUz28ALxCvAAc
Q7wAc0W8AGtMvAAGULwA5Fu8AO9hvAApc7wAhnW8AHt4vADgA70AOzy9AOZVvQB6X70AZ2G9AGxh
vQCGZb0Avmi9ANpqvQCebr0A23C9AAZyvQDneb0ApXy9AGt/vQDaBr4Adgm+AHsQvgDeFb4A5h++
AMQhvgCBJr4Ayy2+ADUzvgBNNb4A0Da+AJU6vgCCP74AqEy+AM1RvgDRUr4AxFi+ABBcvgAZY74A
cWe+AOFsvgBHc74AUXe+AAJ4vgDKAr8AuAO/AJASvwATFr8AARe/AMIZvwAgIr8AdSK/APojvwAw
N78Arjy/AJFMvwBhUb8AWFq/AFJcvwBoXL8Av1+/AExpvwBUbb8AVm6/AG5vvwCLdb8Al3W/AD14
vwDoer8ANXy/AOJ8vwBcCMAARhDAAHAXwACVGsAAvR7AAKwlwAA/JsAADizAAFYswAAtL8AAPjfA
AMQ3wADrQ8AAV0fAAG1HwAB+R8AAPlvAAD5hwABXasAA/WzAAMJxwAAIfcAAIwDBAGcBwQDVBsEA
xwzBAM4XwQATH8EArCDBAAA1wQAaQ8EAfUnBAOBLwQCeTsEA5VHBAHNSwQC2XcEANmnBADdpwQAt
bcEAwHDBAPgHwgCVCcIADA/CAKwhwgDdI8IAETHCAGM0wgCXNcIAHzzCAHZWwgCYWcIAwV7CADFn
wgALa8IAMW/CANl3wgDofsIA3ADDANkDwwAGCcMAJxLDAE8awwBrHMMALR7DAAUlwwASLcMAKUbD
ALtIwwCRScMAElbDACRjwwDfacMAvGvDABpwwwDSesMADgPEAK0OxAAaE8QA8B/EABslxABBJsQA
ozbEAEE3xAChOcQAjzvEAOs+xAADQMQA+kfEANFWxABAWcQA01rEAGZkxAClbcQAaHDEAKVxxAD/
c8QAzHfEABB7xAA6AsUAVwrFAFYZxQCCGcUA3xrFACUbxQDGH8UASijFANdAxQBJRcUA0EfFAOxK
xQBVU8UAk1jFAIpdxQB2Y8UA9mPFALpoxQAzcMUA83jFAIV5xQCiDsYAvBTGAFEVxgB8F8YAPyzG
AD8zxgD+M8YACjXGABM2xgDuOsYA8DrGAK1LxgAuVMYAPVbGAK9ZxgCKXMYAgF7GABRfxgANY8YA
32TGAD9oxgCEcMYAx3rGAD0BxwBuB8cAPwvHAGUUxwD4FccA6yLHAOwoxwBVLccAjjDHAFM8xwCz
P8cAckLHADdSxwDMVMcAhVjHADRuxwDvcccAunjHAOt+xwB9C8gAIA7IADERyADeLMgAtS/IAIBD
yADURMgA4UvIAMZNyAB9f8gA3gLJAPwGyQA3DMkAsA3JACoPyQDmIckAfCLJAPYryQBHLMkASSzJ
ALcsyQDcM8kAnDnJAEs6yQDbQ8kAnkzJAG9OyQDcTskAwl7JAEtjyQDMb8kAqnXJAEYAygB2BcoA
dg3KAGcQygBzGsoAYx3KAGQjygBeJMoAeyTKAEIlygDJLsoAOD/KAFxBygB8S8oAu1HKAEFTygAH
WMoAtWHKAMtoygBtacoAqXrKALF+ygC/f8oAHwfLAKgKywAKDssAbxXLAIAeywC9HssAXSPLAFYo
ywA9McsAHTLLABE4ywAhScsAd1bLAJtiywDTZMsAqGfLAGRuywA7cMsAg3bLAFB8ywCUf8sA6h/M
AFMizADWIswAWCPMAL4lzAD5K8wArDHMAFhEzAC8RMwA3kjMACJNzABoUcwArmDMANBmzAC0c8wA
WnXMAFV2zADRfMwA7wDNAE0EzQADFM0A8BnNAAEfzQBVIc0AQibNAK0rzQCfM80AizjNANo6zQB8
O80AWTzNALZHzQCoSc0Ai0zNAL5OzQBwT80ApVDNADVSzQCAVc0AIlbNACpZzQDhX80AcWHNAPxm
zQDJdc0A3XvNAJMLzgA1Gs4AjibOALImzgANN84A4zzOAMg/zgAJQM4AU0DOAOVLzgDFT84Ad1HO
AG9czgCRX84Aq2HOAL1mzgDua84AzXLOAEMCzwAUBc8AtQfPABoNzwABFc8ATRvPALIdzwA9Ic8A
FivPAGM2zwABQM8ARkXPAJ9QzwBAVc8AxljPANpezwBKX88AvmTPAEprzwBSa88ATnHPAIUC0ABP
BNAAGgfQAOcO0ACSGdAAghzQABoj0AC4JdAAJCzQANg10AAoONAA5UfQABhK0AAmTdAAnFTQABZY
0ACmYdAA5nLQAGt00AAkedAAFgvRALcU0QARGtEACB3RAI0i0QCpKtEAYCvRAMwr0QC+L9EA1zXR
AARB0QDTSdEAI0zRAO5P0QAFVtEAU2HRAIFi0QBYY9EAJGvRANJ20QAve9EAxA/SAJ0S0gD8EtIA
Vh7SAHwk0gBaKNIAwCjSAHwt0gAvNdIAljbSAC430gBoOtIA+T3SAAdE0gC0RNIAlEbSAHZI0gC1
S9IAd13SAJBg0gCnYNIAUGPSAOpm0gC5aNIAP23SABhv0gB+c9IAZXbSAAkB0wBzCtMAYg3TAKYN
0wDHDdMATw/TAEgQ0wBJEdMAtRLTAPIU0wACFdMAFSrTAOdD0wADSNMAeknTAEtV0wBcVtMAD13T
APNf0wD6YtMA5WTTAEF00wBQdNMACnvTANl+0wDmENQAFBXUAAoZ1ABiGtQAsiLUAJ8j1AB0KtQA
/TXUAIk31AAfPtQAuEfUAIRN1AAYWNQAiV3UACJw1AD1dtQAPQfVAJoH1QAMHdUATyHVAEgi1QCT
JtUAJTbVAPk51QCUQdUAAlHVAHZb1QBlY9UAimfVADdo1QDbadUA6W/VAM1w1QD9c9UA03rVAEp/
1QD+AtYAiAXWACUL1gCkC9YA0xPWAEwb1gCcMtYAZzPWAAQ11gCnPNYACj7WAHxD1gA4RNYAAk3W
AAFd1gDVZtYA9XPWAF161gAaBNcAQAvXAMYP1wDyEdcAPxfXAKAd1wDTJ9cABCvXAAsz1wDuPdcA
fUbXAA5Q1wDdX9cAeGPXADNn1wDuatcAUW/XALh01wDldNcARnnXAL5+1wDnCtgA7ArYAJoO2ABD
GdgApxvYAMId2AA7I9gADDLYAMI22AA8TNgA8k7YAKFU2ACHVdgATHDYAFt12ABjedgAuALZAHYE
2QCEB9kAnQfZACsM2QBQHNkAWh3ZAGYn2QBdK9kAcTTZABw32QApPtkAl0HZAChL2QA6TtkAuVHZ
AElZ2QCOWtkABV3ZABtf2QBOX9kAQ2zZAKYD2gCOEdoAAxbaAN8k2gBKMNoA3THaAHo12gB4QtoA
gkLaAMNP2gBhVdoAKGHaAK1i2gAuY9oAD2TaAH942gCeANsAOALbAP8C2wC4BtsAbynbAJIw2wCM
M9sAVjfbAJdT2wC7WdsA+mTbAARt2wBaddsASXbbADx32wBYd9sAjXrbAKJ/2wDuf9sAbwHcADwC
3AD9DdwArhbcAKEa3AC5JtwAQijcAHsu3ADhMdwABjXcAHw23ABMPtwAKT/cAGVU3ABJV9wACFjc
AJBg3AB/Y9wA02/cAPBz3ADCdtwArXrcAMF73ABlAd0AHQPdABEI3QDsCd0AZRLdAJgV3QA8F90A
NB3dAMcd3QAgJN0AEyzdAFst3QCvLd0ALy/dAB853QD8Q90A70jdAOJK3QDsWd0AY1rdAKxa3QCi
YN0A7WXdABtn3QCgZ90Au2jdAGxp3QA5a90AbXvdAGV93QB6BN4AHAbeALUH3gDMC94A5w/eALsT
3gCdHt4AoCPeANgo3gB1K94AmTDeALgy3gDCPd4AiUDeAAxC3gBdRN4AykXeAClO3gAoWN4AX2De
AN9k3gBrA98AkAPfAEcH3wD9Cd8ACw/fADkV3wA4F98AchjfAG4g3wB7J98AVC7fAGou3wD9L98A
6DHfAPUz3wB5N98A0UrfALlS3wC8Ut8A4mjfAE5t3wAXcd8ACAjgAG4S4ACKE+AASxbgAF0b4AD3
KOAAGj3gACtE4AAaRuAAH0jgAFZM4ACvVOAAYVbgAO5b4AAeXuAA1GPgAI5w4AD8e+AAgwrhAB0T
4QCRFOEAxC7hAL484QD3PeEAIEnhABRK4QDfTOEAOlThAFhv4QAvcuEA1HLhAGNz4QBUduEAYXvh
AIh+4QCVfuEATQDiAOkO4gBSD+IA6Q/iAB4S4gAlGeIAmB3iAGAq4gCzOeIA4TviABc94gB+QeIA
kELiAEhI4gDGV+IARV3iABNg4gAgZuIAV3DiAN984gCYF+MAlRzjAKku4wCfMeMAdzrjAG1T4wCj
YeMAbWTjAARm4wDhaOMAEGvjACVu4wDgeOMAPnnjAOQT5ADpH+QAHC/kAPI05ADpNeQAAD3kAHBD
5ADbTuQAe0/kAM5S5ACMYeQAs2HkAElx5AB/ceQA8RHlAE8S5QDOFeUAYxjlAN0b5QAyIOUAsinl
ACIs5QCEQOUAhUTlAH9F5QDEReUACUblACpY5QBNYOUAF2flABV25QDtd+UAPQLmAKgD5gAZBuYA
lwjmAOwK5gClGeYAehrmAG4f5gAXJOYA4yTmAOAt5gA/QOYAskHmAJdD5gBvR+YAF1TmAOBg5gAM
auYAEWzmAA9w5gB0dOYAXHrmAJx75gDdfeYAgn7mAKp/5gDlDucA2BDnAAYb5wD/HOcACyLnACI5
5wCSOecA4DvnANo+5wADP+cAyD/nAEtB5wDlRucAgk3nABNR5wATUucAk1XnAKBc5wBEZOcA6GXn
AIxn5wCPZ+cAGGjnADts5wDWfOcAWQDoABoD6AAjEOgA5xToAGoa6AAxIOgA9yvoAF4s6ACgL+gA
NzHoAKk16AC3NugAKz3oAOFE6ACFRegAKlXoACRd6AAOYOgAIWLoAHxl6ABOaegAuWnoAINr6AAW
bOgAPnDoAOlx6ACMfugArwrpALwN6QBuEekAUx7pAJUn6QAJN+kAKDjpADA66QARTekA+VDpAA9T
6QDea+kAMHTpABl26QBGeekA1QLqALwJ6gC6CuoAsxPqAAYZ6gBuJuoAECvqALgv6gDrMeoAsDjq
AB5D6gAYSeoAJEvqAHdW6gDCXeoAN2PqAB9p6gDUb+oAvXTqACN16gCBd+oA3XvqACh+6gDMBusA
QgjrAEoP6wCrFusAEhjrAHoo6wBZLOsAfyzrADg26wA2OOsA4TjrAJE86wDtP+sAiEbrAIZM6wBv
V+sAlFjrABFd6wDTZOsAw2brACJw6wDve+sAPH7rAFsH7AAuCuwAfgrsAAgU7AAxGuwAySjsALgv
7ADrM+wA5zTsALo57ABBPuwAXkjsAOlk7ABRbuwAB3fsAJ187AC4Be0ADwjtAJoK7QDuD+0AoxDt
ACQU7QDtFu0AmBftAAIZ7QDaGe0AWhztAIQr7QD/Ru0Ae0ntAPBS7QAnU+0AC1vtAG1j7QC9bO0A
TG/tAE5v7QB5cu0AZHXtAMoK7gA7DO4AzhHuAF0U7gDdF+4AUxvuACsn7gB7Ku4AlDLuAHI97gAJ
Q+4A/kTuAElN7gDyT+4AdlHuAONT7gCIZe4At23uAAZv7gCCAe8Asw3vAA0T7wAOHe8ABCLvAK4r
7wBdLu8A6zzvAEo+7wCwRO8ABkXvAMJG7wCaSO8Aek/vAFRX7wDeWO8AoFnvAM9c7wB2X+8A01/v
APtg7wCLaO8AZn/vABIG8ADTBvAAAiTwAIYk8AAtJfAAMyzwAME88ABKPvAAM0DwAK5G8AB2SvAA
J1LwAKFd8ACZX/AAfWHwAOpo8AAxbPAAx3DwAMR58ADwffAA9wDxAC4E8QAGDvEA2hLxAEgU8QCx
FPEAlRvxAG478QCIPvEA8UXxAL5P8QCKU/EAy1fxAFZj8QCbZvEANnbxAH978QBgA/IAFgXyAEkO
8gBSDvIAJRTyAMoY8gB2LPIAuC3yANsy8gCENPIAWDjyAJc/8gD0RPIA/EjyALJJ8gCWSvIAYU7y
ALhi8gBfZPIA723yAPZ08gArevIA03/yAGkE8wDRCPMAMDXzANk68wAERfMA+EzzAANS8wBDYfMA
oGPzAABv8wCqcvMAsnLzAEN28wCgevMA/iT0ABwm9ACmKfQA8DT0AHRA9ACzQvQAU0f0ANJW9ABA
YPQAEWf0AGVn9AC3afQAN3H0ADR49AATAPUAtwD1AHsB9QB2FvUAFh31AEYw9QASNfUAjDX1AJ03
9QDlP/UAjUD1AM1E9QB/UfUAfFb1AGRg9QCGZvUAPGf1APlr9QARbfUAWX71AGoE9gB7CvYA2w/2
APkR9gB2FfYAbRb2AF8Y9gDrGfYA1hr2AD0h9gC4I/YATCX2AJwp9gDAM/YA9DX2AEdU9gAHWvYA
ymD2AA5j9gCda/YAbW32AENw9gDWd/YACn32AAMG9wB/B/cAzg33ADYZ9wDxHfcAKDD3AD4z9wBl
NvcAqEP3AMtQ9wDSV/cA11/3AAtj9wASY/cAt2T3ABhn9wA+Z/cAnGj3AGVx9wB7dfcAEXf3AE93
9wBiBPgA1AT4AJwK+ABVJvgA5Sn4AAsr+ACgM/gApjj4AP1E+AAHRvgAfkv4AMBT+AAAVfgArWL4
ABdv+ACid/gApQ35AKEQ+QA2EvkADB35AMo9+QDPRvkAN0z5AJpP+QD+WvkAZWX5AEhm+QB/aPkA
7Hn5AJt6+QCbfvkAngP6AGAI+gBRC/oA2wv6AGwY+gACG/oAAB76ADsf+gDINPoAnET6AJ9R+gAr
XPoAXmH6AChk+gDZZ/oAZmz6AKpx+gBwePoACn/6ABgA+wAwAPsAfAb7ABIR+wCIHfsA+B37AEIe
+wCEH/sASiT7AOwq+wA+K/sAADP7ALcz+wApNPsAL0D7AG5I+wAAUvsACVP7ANtX+wBCYvsAxmr7
ACBs+wDdePsAX3r7ANQF/ADkCPwAcwr8ADwS/ADtGvwAOhz8ACse/ABCIPwAWCP8AGYn/AAmK/wA
JTj8AFA7/ABVPPwA5j78ANhC/AB6RfwABEf8AIpI/ACGSfwA80v8AP9X/ACrWvwAM2T8AMVk/ADj
cfwAhH38ALB//AA3Fv0AqBr9AP4c/QCnJ/0AYjH9AH4y/QBmRv0Av0v9AMdM/QCQWv0AgV/9AAJh
/QCJZ/0AM279AORu/QDxev0A23/9AHoA/gCHAf4ApAL+AGkD/gDFBf4AmQv+AIwS/gDxMv4AVzj+
APM9/gCYU/4ANFz+AN9n/gDEaP4ATm3+AEd0/gDMff4AiAD/AF4Q/wAqKf8AujX/AJc3/wARPP8A
dT//AA5I/wAaTf8AfE//ACRT/wB+V/8AE2D/ABxj/wDIZf8A5mr/ANFs/wAjeP8A3Xj/AGl7/wAA
AAAAcXYAAHN2AAAAAAAAAQAAAP9AAYABANQkAADUJAAAAAAAAAEAAQDUJAAAAAAAANQkAAAAAAAA
AjwBAAAAAAAAnkcAAJ5IAACeSQAAhU8AAIVQAACFUQAAhVIAAIVTAACFVAAAFVYAABVXAAAVWAAA
FVkAABVaAADcWwAA3FwAANxkAADcZQAA3GcAANxoAADcagAA3GsAALBtAACwbgAAsHQAAMV2AABw
AAAQAEAAAHAAAFAAAAAAcAAAUgAAAABwAACoAEAAAHAAAFoAAAAAcAAAXAAAAABwAABeAAAAAHAA
AGAAAAAAcAAAYgAAAABwAADIAEAAAHAAAGYAAAAAcAAAaAAAAABwAABqAAAAAHAAAGwAAAAAcAAA
3ABAAABwAABwAAAAAHAAAOQAQAAAcAAAegAAAABwAAD4AEAAAHAAAH4AAAAAcAAAuAFAAABwAADe
AAAAAHAAAMABQAAAcAAA4gAAAABwAADIAUAAAHAAAOgBQAAA//8BAAAABwBVAG4AawBuAG8AdwBu
AP//AQAIAAAAAAAAAAAAAAD//wEAAAAAAP//AAACAP//AAAAAP//AAACAP//AAAAAAsAAABHHpAB
AAACAgYDBQQFAgME/y4A4Ft4AMAJAAAAAAAAAP8BAAAAAAAAVABpAG0AZQBzACAATgBlAHcAIABS
AG8AbQBhAG4AAAA1HpABAgAFBQECAQcGAgUHAAAAAAAAABAAAAAAAAAAAAAAAIAAAAAAUwB5AG0A
YgBvAGwAAAAzLpABAAACCwYEAgICAgIE/y4A4EN4AMAJAAAAAAAAAP8BAAAAAAAAQQByAGkAYQBs
AAAAVwCQAQAQAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAABAAAAAAAAAEwATQBNAG8AbgBvADkA
LQBSAGUAZwB1AGwAYQByAAAAQwBhAGwAaQBiAHIAaQAAAEkAkAEACQAAAAAAAAAAAAADAAAAAAAA
AAAAAAAAAAAAAQAAAAAAAABTAEYAUwBYADAAOQAwADAAAABDAGEAbABpAGIAcgBpAAAAPy6EAwAA
AgsKBAIBAgICBK8CAKD7eABAAAAAAAAAAACfAAAAAAAAAEEAcgBpAGEAbAAgAEIAbABhAGMAawAA
ADUukAEAAAILBgQDBQQEAgT/LgDhW2AAwCkAAAAAAAAA/wEBAAAAAABUAGEAaABvAG0AYQAAAD89
kAEAAAIHAwkCAgUCBAT/LgDgQ3gAwAkAAAAAAAAA/wEAAAAAAABDAG8AdQByAGkAZQByACAATgBl
AHcAAAA3HpABAAACBAUDBQQGAwIE/wIA4P8EAEAAAAAAAAAAAJ8BAAAAAAAAQwBhAG0AYgByAGkA
YQAAADsOkAECAAUAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAgAAAAABXAGkAbgBnAGQAaQBu
AGcAcwAAAEEekAEAAAIEBQMFBAYDAgT/AgDg/yQAQgAAAAAAAAAAnwEAAAAAAABDAGEAbQBiAHIA
aQBhACAATQBhAHQAaAAAACIABABxEIgYAPDQAuQEkAEAAAAABxNKB5aCS2ftw/OGDgDSfQAArREA
AMRkAAALADwAAAAEAAMQ1gAAAK0RAADEZAAACwA8AAAA1gAAAAAAAAAhAwDwEAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAACgBaAFeAC0AIGCMjAAAAAAAAAAAAAAAAAAADV2AAA1dgAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
AAAAAAAAAAwzg3EA8BAA39///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISFAAAAAADfD/DwEI
IZUAAOQEAAD///9/////f////3////9/////f////3////9/rSqsAAAEAAAyAAAAAAAAAAAAAAAA
AAAABwAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAQHAAACgAAAAAAAAAAAHgAAAB4AAAAAAAAAAAA
AACgBQAAUhlFJAsAAAAAAAAA3AAAAAEAAAD//xIAAAAAAAAAIABUAHcAaQBsAGkAZwBoAHQAIABQ
AGEAcgBrACAAQgBvAGEAcgBkACAAbwBmACAARABpAHIAZQBjAHQAbwByAHMAAAAAAAAACgBCAGkA
bABsACAAQwBsAGEAcgBlABMAVwBpAGwAbABpAGEAbQAgAEYAIABDAGwAYQByAGUAIABJAEkASQAA
AAAAAAAAAAAAAAAAAAAAAAAAAFwAAAAGAAAAFAAAAAAADAABAAwAAgAMAAMADAAEAAwABQAMAAYA
DAAHAAwACAAMAAkADAAKAAwACwAMAAwADAANAAwADgAMAA8ADAAQAAwAEQAMABIADAATAAwAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAACgACAAAAAAAAAAAAAAAAAAAA
AAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAACwAQAAEgAAAAEAAACYAAAAAgAAAKAAAAADAAAAzAAA
AAQAAADYAAAABQAAAOwAAAAGAAAA+AAAAAcAAAAEAQAACAAAABgBAAAJAAAANAEAABIAAABAAQAA
CgAAAGABAAALAAAAbAEAAAwAAAB4AQAADQAAAIQBAAAOAAAAkAEAAA8AAACYAQAAEAAAAKABAAAT
AAAAqAEAAAIAAADkBAAAHgAAACQAAABUd2lsaWdodCBQYXJrIEJvYXJkIG9mIERpcmVjdG9ycwAA
AAAeAAAABAAAAAAAAAAeAAAADAAAAEJpbGwgQ2xhcmUAAB4AAAAEAAAAAAAAAB4AAAAEAAAAAAAA
AB4AAAAMAAAATm9ybWFsLmRvdG0AHgAAABQAAABXaWxsaWFtIEYgQ2xhcmUgSUlJAB4AAAAEAAAA
MTQAAB4AAAAYAAAATWljcm9zb2Z0IE9mZmljZSBXb3JkAAAAQAAAAABsXa+TEQAAQAAAAABG+/Vb
6ssBQAAAAADqtgHHHNIBQAAAAABc+iwdQNIBAwAAAAsAAAADAAAArREAAAMAAADEZAAAAwAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAAoAAgAAAAAAAAAAAAAAAAAAAAAAAgAAAALV
zdWcLhsQk5cIACss+a5EAAAABdXN1ZwuGxCTlwgAKyz5rkwBAAAIAQAADAAAAAEAAABoAAAADwAA
AHAAAAAFAAAAfAAAAAYAAACEAAAAEQAAAIwAAAAXAAAAlAAAAAsAAACcAAAAEAAAAKQAAAATAAAA
rAAAABYAAAC0AAAADQAAALwAAAAMAAAA6QAAAAIAAADkBAAAHgAAAAQAAAAAAAAAAwAAANYAAAAD
AAAAPAAAAAMAAAA1dgAAAwAAAAAAEAALAAAAAAAAAAsAAAAAAAAACwAAAAAAAAALAAAAAAAAAB4Q
AAABAAAAIQAAAFR3aWxpZ2h0IFBhcmsgQm9hcmQgb2YgRGlyZWN0b3JzAAwQAAACAAAAHgAAAAYA
AABUaXRsZQADAAAAAQAAAABQAAAAAwAAAAAAAAAgAAAAAQAAADgAAAACAAAAQAAAAAEAAAACAAAA
DAAAAEJhc2UgVGFyZ2V0AAIAAADkBAAAHgAAAAgAAABfdG9wAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoA
AAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAA
ABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAA
JwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1
AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMA
AABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAA
AFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAA
YAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABu
AAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAewAAAHwA
AAB9AAAAfgAAAP7///+AAAAAgQAAAIIAAACDAAAAhAAAAIUAAACGAAAA/v///4gAAACJAAAAigAA
AIsAAACMAAAAjQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAJQAAACVAAAAlgAAAJcAAACYAAAA
mQAAAJoAAACbAAAAnAAAAJ0AAACeAAAAnwAAAKAAAAChAAAAogAAAKMAAACkAAAApQAAAKYAAACn
AAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAAK8AAACwAAAAsQAAALIAAACzAAAAtAAAALUA
AAC2AAAAtwAAALgAAAC5AAAAugAAALsAAAC8AAAAvQAAAL4AAAC/AAAAwAAAAMEAAADCAAAAwwAA
AMQAAADFAAAAxgAAAMcAAADIAAAAyQAAAMoAAADLAAAAzAAAAM0AAADOAAAAzwAAANAAAADRAAAA
0gAAANMAAADUAAAA1QAAANYAAADXAAAA2AAAANkAAADaAAAA2wAAANwAAADdAAAA3gAAAN8AAADg
AAAA4QAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4A
AADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA/v////oAAAD7AAAA/AAA
AP0AAAD+AAAA/wAAAAABAAD+////AgEAAAMBAAAEAQAABQEAAAYBAAAHAQAACAEAAP7////9////
/f////3///8NAQAADgEAAP7////+////EQEAAP7/////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUB//////////8DAAAABgkCAAAAAADAAAAAAAAARgAA
AAAAAAAAAAAAALDwCC8dQNIBEAEAAEADAAAAAAAARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgH///////////////8AAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAABAAAAAAAAAxAFQAYQBiAGwAZQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgACAAEA
AAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIcAAACh4wAAAAAA
AFcAbwByAGQARABvAGMAdQBtAGUAbgB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAaAAIBCgAAAAUAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAADj8AAAAAAAABQBTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgH///////////////8AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAD5AAAAABAAAAAAAAAFAEQAbwBjAHUAbQBlAG4AdABTAHUAbQBtAGEA
cgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAOAACAQQAAAD//////////wAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAEAAAAAAAAE0AcwBvAEQAYQB0AGEA
UwB0AG8AcgBlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAEA////
//////8HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgkQcvHUDSAWAtCC8dQNIBAAAAAAAAAAAAAAAA
TQDEAFMAMADMAMMAWADGAMwAVQA0AFoANABCAEcA3wDCAMYA1QDbAMUAQQA9AD0AAAAAAAAAAAAA
AAAAAAAAADIAAQH//////////wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCRBy8dQNIBYC0ILx1A
0gEAAAAAAAAAAAAAAABJAHQAZQBtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAf////8JAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAOAQAAAAAAAFAAcgBvAHAAZQByAHQAaQBlAHMAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAIA////////////////AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAFUBAAAAAAAAAQBDAG8AbQBwAE8AYgBq
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgECAAAA
BgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAcgAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAD+////BgAAAAcAAAAIAAAACQAAAAoAAAD+////
DAAAAP7/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxv
bmU9Im5vIj8+PGI6U291cmNlcyBTZWxlY3RlZFN0eWxlPSJcQVBBLlhTTCIgU3R5bGVOYW1lPSJB
UEEiIHhtbG5zOmI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1
bWVudC8yMDA2L2JpYmxpb2dyYXBoeSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3Jt
YXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2JpYmxpb2dyYXBoeSI+PC9iOlNvdXJjZXM+AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4NCjxkczpkYXRhc3Rv
cmVJdGVtIGRzOml0ZW1JRD0ie0IyOUE0NDMyLUU2MzUtNDdCMS05OTc4LTExQkY4QTZEN0I5NH0i
IHhtbG5zOmRzPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1l
bnQvMjAwNi9jdXN0b21YbWwiPjxkczpzY2hlbWFSZWZzPjxkczpzY2hlbWFSZWYgZHM6dXJpPSJo
dHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9iaWJs
aW9ncmFwaHkiLz48L2RzOnNjaGVtYVJlZnM+PC9kczpkYXRhc3RvcmVJdGVtPgAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAP7/AwoAAP////8GCQIAAAAAAMAAAAAA
AABGIAAAAE1pY3Jvc29mdCBXb3JkIDk3LTIwMDMgRG9jdW1lbnQACgAAAE1TV29yZERvYwAQAAAA
V29yZC5Eb2N1bWVudC44APQ5snEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAA==
------=_Part_118_538700335.1480549896005--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Wed, 30 Nov 2016 17:07:18 -0800 (PST)
Raw View
------=_Part_164_1646590448.1480554438859
Content-Type: multipart/alternative;
boundary="----=_Part_165_101011499.1480554438860"
------=_Part_165_101011499.1480554438860
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Wednesday, November 30, 2016 at 6:51:36 PM UTC-5, billc...@gmail.com=20
wrote:
>
> Introduction
>
> This somewhat provocative note was posted earlier on the S8 Concepts=20
> forum, since it is largely related to templates and Concepts. As it did=
=20
> not provoke a response there, I thought it might be of some interest here=
.. =20
>
> This note suggests some generalization and simplification of C++ language=
=20
> syntax, largely based on extensions of what is currently in =E2=80=9CConc=
epts=20
> Lite=E2=80=9D. There is some general discussion of reasons for what exi=
sts, and=20
> of future evolution. Since it is a rather long note for a forum entry,=
=20
> skipping to the Examples section might provide a quick overview of some o=
f=20
> the resulting possibilities.
>
It's probably not a good idea to start by telling the reader to jump to the=
=20
end if they want to know what you're actually talking about.
One of the problems with this is that it's basically trying to tackle a=20
bunch of syntactic changes, all of which have fundamentally different=20
reasons and justifications. Each change is really something that ought to=
=20
have its own conversation; dumping them in the same thread/paper/etc makes=
=20
that exceedingly difficult.
Indeed, the organization of your ideas is very odd. You start by talking=20
about how syntax for some things in unclear. Then you talk about backwards=
=20
compatibility through #pragmas or some such. And yet, your later=20
discussions don't actually use #pragmas; their syntax fits within the=20
existing scope of C++.
In any case, I find your concept syntax to be dubious. It only seems to=20
work for concepts that represent a single type. Concepts which act on=20
multiple types, or non-type values don't seem to exist within your syntax.=
=20
And while I'm no fan of the existing concepts TS concept definition syntax,=
=20
I think an appropriate syntax would not need to be nearly as radical as you=
=20
suggest.
Something like this would be adequate:
template<...>
concept ConceptName(RequiresParameters) {RequiresClause}
Which would translate to something that acts like this:
template<...>
concept bool ConceptName =3D requires(RequiresParameters) {RequiresClause};
Obviously, the parts that are optional for a `requires` expression are=20
optional for a `concept` definition. This syntax would get rid of most of=
=20
the pointless noise of concept definitions, but still allowing them to take=
=20
multiple template parameters and the like.
And subjectively, I find your syntax's copious use of `#` to be like=20
constantly getting poked in the eye.
On your new function declaration syntax, I find your statement that the=20
compiler can arbitrarily determine if a parameter should be taken by value=
=20
or reference to be... dubious. If a function takes a parameter by &&, how=
=20
do you say that? It's an output parameter, but it's not like other output=
=20
parameters; the user is supposed to call `std::move` or the like to fill it=
=20
in. Conceptually, a && parameter is one that is taking an object that it=20
will move or forward from, not merely modify.
Furthermore, there is no discussion about how such declarations would be=20
handled at the ABI level. If you're going to radically alter how we declare=
=20
functions, you need to think about these kinds of issues.
As for your discussion of naming, scopes, and name prefixes... that seems=
=20
to defeat the whole purpose of having name scope reach be implicit. The=20
whole point of having such scopes is that they're implicit; that you don't=
=20
have to use special syntax to say if a name is captured in a lambda or not.=
=20
That your code can look *normal*, that it doesn't explicitly have to call=
=20
out things that are by definition implicit.
That's a good thing.
Also, a few other comments:
=20
> More difficult are library facilities for interacting with compiler=20
> constructs for multiple types of references (rvalue, glvalue, prvalue, . =
..=20
> .)
>
glvalue and prvalue are not "types of references"; they're categories of=20
*expressions*. And "rvalue reference" doesn't mean the same thing as an=20
"rvalue expression".
> =20
> =E2=80=9CModernization=E2=80=9D of C++ syntax could start with removal of=
tri-graph=20
> support.
>
C++17 is already doing that.
A Goggle query for =E2=80=9Cregular types=E2=80=9D produces an assortment o=
f unrelated=20
> concepts. =E2=80=9CStructured=E2=80=9D seems more user friendly than =
=E2=80=9Csemi-regular=E2=80=9D to=20
> indicate operations for allocation, deallocation, copy, move, assign, and=
=20
> swap. Similarly, =E2=80=9Centity=E2=80=9D could indicate basic classes t=
hat are=20
> =E2=80=9Cstructured=E2=80=9D, and which also have comparison and ordering=
operations=20
> defined.
>
While I might agree that "semi-regular" and "regular" don't easily make=20
sense as terms, "structured" and "entity" are no better. What is it about a=
=20
type's copy/move behavior that makes it "structured"? What does it mean for=
=20
a type to be an "entity"?
Also, the entire game development industry that already has a definition=20
for the term "entity" and that isn't it. Let's not make that more confusing=
..
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/cfc32d5b-9e45-4659-9164-17f75a8d578e%40isocpp.or=
g.
------=_Part_165_101011499.1480554438860
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Wednesday, November 30, 2016 at 6:51:36 PM UTC-=
5, billc...@gmail.com wrote:<blockquote class=3D"gmail_quote" style=3D"marg=
in: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><d=
iv dir=3D"ltr"><h3><span style=3D"font-family:"Times New Roman",s=
erif">Introduction</span></h3><p class=3D"MsoNormal" style=3D"line-height:n=
ormal"><font face=3D"Times New Roman, serif">This somewhat provocative note=
was posted earlier on the S8 Concepts forum, since it is largely related t=
o templates and Concepts. =C2=A0As it did not provoke a response there, I t=
hought it might be of some interest here. =C2=A0</font></p><p class=3D"MsoN=
ormal" style=3D"line-height:normal"><span style=3D"font-family:"Times =
New Roman",serif">This note suggests some generalization and simplific=
ation of C++ language syntax, largely based on extensions of what is curren=
tly in =E2=80=9CConcepts Lite=E2=80=9D.=C2=A0 =C2=A0There is some general d=
iscussion of reasons for what exists, and of future evolution. =C2=A0=C2=A0=
Since it is a rather long note for a forum entry, skipping to the Examples =
section might provide a quick overview of some of the resulting possibiliti=
es.</span></p></div></blockquote><div><br>It's probably not a good idea=
to start by telling the reader to jump to the end if they want to know wha=
t you're actually talking about.<br><br>One of the problems with this i=
s that it's basically trying to tackle a bunch of syntactic changes, al=
l of which have fundamentally different reasons and justifications. Each ch=
ange is really something that ought to have its own conversation; dumping t=
hem in the same thread/paper/etc makes that exceedingly difficult.<br><br>I=
ndeed, the organization of your ideas is very odd. You start by talking abo=
ut how syntax for some things in unclear. Then you talk about backwards com=
patibility through #pragmas or some such. And yet, your later discussions d=
on't actually use #pragmas; their syntax fits within the existing scope=
of C++.<br><br>In any case, I find your concept syntax to be dubious. It o=
nly seems to work for concepts that represent a single type. Concepts which=
act on multiple types, or non-type values don't seem to exist within y=
our syntax. And while I'm no fan of the existing concepts TS concept de=
finition syntax, I think an appropriate syntax would not need to be nearly =
as radical as you suggest.<br><br>Something like this would be adequate:<br=
><br><div style=3D"background-color: rgb(250, 250, 250); border-color: rgb(=
187, 187, 187); border-style: solid; border-width: 1px; overflow-wrap: brea=
k-word;" class=3D"prettyprint"><code class=3D"prettyprint"><div class=3D"su=
bprettyprint"><span style=3D"color: #008;" class=3D"styled-by-prettify">tem=
plate</span><span style=3D"color: #660;" class=3D"styled-by-prettify"><.=
...></span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>=
</span><span style=3D"color: #008;" class=3D"styled-by-prettify">concept</s=
pan><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span=
style=3D"color: #606;" class=3D"styled-by-prettify">ConceptName</span><spa=
n style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=
=3D"color: #606;" class=3D"styled-by-prettify">RequiresParameters</span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">{</span><span style=3D"color: #606;" =
class=3D"styled-by-prettify">RequiresClause</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">}</span></div></code></div><br>Which would=
translate to something that acts like this:<br><br><div style=3D"backgroun=
d-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style=
: solid; border-width: 1px; overflow-wrap: break-word;" class=3D"prettyprin=
t"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D=
"color: #008;" class=3D"styled-by-prettify">template</span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify"><...></span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"color:=
#008;" class=3D"styled-by-prettify">concept</span><span style=3D"color: #0=
00;" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" clas=
s=3D"styled-by-prettify">bool</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify"> </span><span style=3D"color: #606;" class=3D"styled-by-=
prettify">ConceptName</span><span style=3D"color: #000;" class=3D"styled-by=
-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">=3D</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> requ=
ires</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</spa=
n><span style=3D"color: #606;" class=3D"styled-by-prettify">RequiresParamet=
ers</span><span style=3D"color: #660;" class=3D"styled-by-prettify">)</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">{</span><span style=3D"co=
lor: #606;" class=3D"styled-by-prettify">RequiresClause</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">};</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"><br></span></div></code></div><br>Ob=
viously, the parts that are optional for a `requires` expression are option=
al for a `concept` definition. This syntax would get rid of most of the poi=
ntless noise of concept definitions, but still allowing them to take multip=
le template parameters and the like.<br><br>And subjectively, I find your s=
yntax's copious use of `#` to be like constantly getting poked in the e=
ye.<br><br>On your new function declaration syntax, I find your statement t=
hat the compiler can arbitrarily determine if a parameter should be taken b=
y value or reference to be... dubious. If a function takes a parameter by &=
amp;&, how do you say that? It's an output parameter, but it's =
not like other output parameters; the user is supposed to call `std::move` =
or the like to fill it in. Conceptually, a && parameter is one that=
is taking an object that it will move or forward from, not merely modify.<=
br><br>Furthermore, there is no discussion about how such declarations woul=
d be handled at the ABI level. If you're going to radically alter how w=
e declare functions, you need to think about these kinds of issues.<br><br>=
As for your discussion of naming, scopes, and name prefixes... that seems t=
o defeat the whole purpose of having name scope reach be implicit. The whol=
e point of having such scopes is that they're implicit; that you don=
9;t have to use special syntax to say if a name is captured in a lambda or =
not. That your code can look <i>normal</i>, that it doesn't explicitly =
have to call out things that are by definition implicit.<br><br>That's =
a good thing.<br><br>Also, a few other comments:<br>=C2=A0</div><blockquote=
class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1=
px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><p class=3D"MsoNormal" s=
tyle=3D"line-height:normal"><span style=3D"font-family:"Times New Roma=
n",serif">More difficult are library facilities for interacting with c=
ompiler constructs for multiple types of references (rvalue, glvalue, prval=
ue, . . .)</span></p></div></blockquote><div><br>glvalue and prvalue are no=
t "types of references"; they're categories of <i>expressions=
</i>. And "rvalue reference" doesn't mean the same thing as a=
n "rvalue expression".<br></div><blockquote class=3D"gmail_quote"=
style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-=
left: 1ex;"><div dir=3D"ltr"></div></blockquote><div>=C2=A0</div><blockquot=
e class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: =
1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><p class=3D"MsoNormal" =
style=3D"line-height:normal"><span style=3D"font-family:"Times New Rom=
an",serif"> =E2=80=9CModernization=E2=80=9D of C++ syntax could start =
with removal of tri-graph support.</span></p></div></blockquote><div><br>C+=
+17 is already doing that.<br><br></div><blockquote class=3D"gmail_quote" s=
tyle=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-le=
ft: 1ex;"><div dir=3D"ltr"><p class=3D"MsoNormal" style=3D"line-height:norm=
al"><span style=3D"font-family:"Times New Roman",serif">A Goggle =
query for =E2=80=9Cregular types=E2=80=9D produces an assortment of unrelat=
ed concepts.=C2=A0 =C2=A0=E2=80=9CStructured=E2=80=9D seems more user frien=
dly than =E2=80=9Csemi-regular=E2=80=9D to indicate operations for allocati=
on, deallocation, copy, move, assign, and swap.=C2=A0 Similarly, =E2=80=9Ce=
ntity=E2=80=9D could indicate basic classes that are =E2=80=9Cstructured=E2=
=80=9D, and which also have comparison and ordering operations defined.</sp=
an></p></div></blockquote><div><br>While I might agree that "semi-regu=
lar" and "regular" don't easily make sense as terms, &qu=
ot;structured" and "entity" are no better. What is it about =
a type's copy/move behavior that makes it "structured"? What =
does it mean for a type to be an "entity"?<br><br>Also, the entir=
e game development industry that already has a definition for the term &quo=
t;entity" and that isn't it. Let's not make that more confusin=
g.</div><br></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/cfc32d5b-9e45-4659-9164-17f75a8d578e%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/cfc32d5b-9e45-4659-9164-17f75a8d578e=
%40isocpp.org</a>.<br />
------=_Part_165_101011499.1480554438860--
------=_Part_164_1646590448.1480554438859--
.
Author: FrankHB1989 <frankhb1989@gmail.com>
Date: Wed, 30 Nov 2016 17:39:19 -0800 (PST)
Raw View
------=_Part_84_1904811223.1480556359251
Content-Type: multipart/alternative;
boundary="----=_Part_85_174309441.1480556359251"
------=_Part_85_174309441.1480556359251
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
=E5=9C=A8 2016=E5=B9=B412=E6=9C=881=E6=97=A5=E6=98=9F=E6=9C=9F=E5=9B=9B UTC=
+8=E4=B8=8A=E5=8D=889:07:18=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=9A
>
>
> A Goggle query for =E2=80=9Cregular types=E2=80=9D produces an assortment=
of unrelated=20
>> concepts. =E2=80=9CStructured=E2=80=9D seems more user friendly than =
=E2=80=9Csemi-regular=E2=80=9D to=20
>> indicate operations for allocation, deallocation, copy, move, assign, an=
d=20
>> swap. Similarly, =E2=80=9Centity=E2=80=9D could indicate basic classes =
that are=20
>> =E2=80=9Cstructured=E2=80=9D, and which also have comparison and orderin=
g operations=20
>> defined.
>>
>
> While I might agree that "semi-regular" and "regular" don't easily make=
=20
> sense as terms, "structured" and "entity" are no better. What is it about=
a=20
> type's copy/move behavior that makes it "structured"? What does it mean f=
or=20
> a type to be an "entity"?
>
> "Entity" is even worse because the meaning here clashes with well-defined=
=20
normative terms. A *type *is really an *entity *as per Clause 3 by now,=20
though.
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/a0335fc5-e620-4b14-96d6-96fca3e02701%40isocpp.or=
g.
------=_Part_85_174309441.1480556359251
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>=E5=9C=A8 2016=E5=B9=B412=E6=9C=881=E6=97=A5=E6=98=
=9F=E6=9C=9F=E5=9B=9B UTC+8=E4=B8=8A=E5=8D=889:07:18=EF=BC=8CNicol Bolas=E5=
=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_quote" style=3D"margin: =
0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div d=
ir=3D"ltr"><br><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-l=
eft:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><p =
class=3D"MsoNormal" style=3D"line-height:normal"><span style=3D"font-family=
:"Times New Roman",serif">A Goggle query for =E2=80=9Cregular typ=
es=E2=80=9D produces an assortment of unrelated concepts.=C2=A0 =C2=A0=E2=
=80=9CStructured=E2=80=9D seems more user friendly than =E2=80=9Csemi-regul=
ar=E2=80=9D to indicate operations for allocation, deallocation, copy, move=
, assign, and swap.=C2=A0 Similarly, =E2=80=9Centity=E2=80=9D could indicat=
e basic classes that are =E2=80=9Cstructured=E2=80=9D, and which also have =
comparison and ordering operations defined.</span></p></div></blockquote><d=
iv><br>While I might agree that "semi-regular" and "regular&=
quot; don't easily make sense as terms, "structured" and &quo=
t;entity" are no better. What is it about a type's copy/move behav=
ior that makes it "structured"? What does it mean for a type to b=
e an "entity"?<br><br></div></div></blockquote><div>"Entity&=
quot; is even worse because the meaning here clashes with well-defined norm=
ative terms. A <i>type </i>is really an <i>entity </i>as per Clause 3 by no=
w, though.<br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a0335fc5-e620-4b14-96d6-96fca3e02701%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/a0335fc5-e620-4b14-96d6-96fca3e02701=
%40isocpp.org</a>.<br />
------=_Part_85_174309441.1480556359251--
------=_Part_84_1904811223.1480556359251--
.
Author: billclare3@gmail.com
Date: Thu, 8 Dec 2016 08:52:28 -0800 (PST)
Raw View
------=_Part_218_696324288.1481215948211
Content-Type: multipart/alternative;
boundary="----=_Part_219_1381022110.1481215948211"
------=_Part_219_1381022110.1481215948211
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Wednesday, November 30, 2016 at 8:07:18 PM UTC-5, Nicol Bolas wrote:
>
>
>
> On Wednesday, November 30, 2016 at 6:51:36 PM UTC-5, billc...@gmail.com=
=20
> wrote:
>>
>> Introduction
>>
>> This somewhat provocative note was posted earlier on the S8 Concepts=20
>> forum, since it is largely related to templates and Concepts. As it did=
=20
>> not provoke a response there, I thought it might be of some interest her=
e. =20
>>
>> This note suggests some generalization and simplification of C++ languag=
e=20
>> syntax, largely based on extensions of what is currently in =E2=80=9CCon=
cepts=20
>> Lite=E2=80=9D. There is some general discussion of reasons for what ex=
ists, and=20
>> of future evolution. Since it is a rather long note for a forum entry,=
=20
>> skipping to the Examples section might provide a quick overview of some =
of=20
>> the resulting possibilities.
>>
>
> It's probably not a good idea to start by telling the reader to jump to=
=20
> the end if they want to know what you're actually talking about.
>
> One of the problems with this is that it's basically trying to tackle a=
=20
> bunch of syntactic changes, all of which have fundamentally different=20
> reasons and justifications. Each change is really something that ought to=
=20
> have its own conversation; dumping them in the same thread/paper/etc make=
s=20
> that exceedingly difficult.
>
=20
Clearly the suggestions do indeed need separate detailed and precise=20
proposals. This is a somewhat different note than is usually found here.=
=20
It attempts to suggest the possibility for rethinking a major syntax=20
revision to dramatically increase the expressiveness and scope of=20
fundamental C++ abstractions.=20
=20
>
> And subjectively, I find your syntax's copious use of `#` to be like=20
> constantly getting poked in the eye.
>
=20
Clear and simple distinctions among things that look alike, but are=20
fundamentally quite different, are useful. Something less intrusive, such=
=20
as ".", might work better. =20
>
> On your new function declaration syntax, I find your statement that the=
=20
> compiler can arbitrarily determine if a parameter should be taken by valu=
e=20
> or reference to be... dubious. If a function takes a parameter by &&, how=
=20
> do you say that? It's an output parameter, but it's not like other output=
=20
> parameters; the user is supposed to call `std::move` or the like to fill =
it=20
> in. Conceptually, a && parameter is one that is taking an object that it=
=20
> will move or forward from, not merely modify.
>
=20
This is a good example of the gist of my post. Flagging a parameter as &&=
=20
is an ambiguous extension (universal reference / rvalue reference) of what=
=20
seems like a somewhat awkward convention already. The suggestion is for=20
syntax that more clearly indicates intent. =20
>
> Furthermore, there is no discussion about how such declarations would be=
=20
> handled at the ABI level. If you're going to radically alter how we decla=
re=20
> functions, you need to think about these kinds of issues.
>
=20
A related post on S8 discusses the possibility of providing a basic header=
=20
file (with or without Concepts), to permit template compilation, and then=
=20
subsequent type safe binding of the resulting compilation to actual=20
parameters, either at compile or run time. The approach, as for current=20
abstract types, relies on manipulation of resulting "vtables".=20
>
> As for your discussion of naming, scopes, and name prefixes... that seems=
=20
> to defeat the whole purpose of having name scope reach be implicit. The=
=20
> whole point of having such scopes is that they're implicit; that you don'=
t=20
> have to use special syntax to say if a name is captured in a lambda or no=
t.=20
> That your code can look *normal*, that it doesn't explicitly have to call=
=20
> out things that are by definition implicit.
>
> That's a good thing.
>
=20
Yes, there are significant trade-offs to be made between concise syntax=20
(think APL) and verbose syntax with explicit redundancy (think COBOL and=20
XML). Choices depend on the intended audience for the code. Mappings to=
=20
and from common "abstract syntax" is an intriguing possibility, where this=
=20
can lend different aspects of clarity. =20
>
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/1d3d0199-1287-4ce2-9bbb-6623e700828c%40isocpp.or=
g.
------=_Part_219_1381022110.1481215948211
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Wednesday, November 30, 2016 at 8:07:18 PM UTC-=
5, Nicol Bolas wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;m=
argin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr"><br><br>On Wednesday, November 30, 2016 at 6:51:36 PM UTC-5, <a>bi=
llc...@gmail.com</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margi=
n:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=
=3D"ltr"><h3><span style=3D"font-family:"Times New Roman",serif">=
Introduction</span></h3><p class=3D"MsoNormal" style=3D"line-height:normal"=
><font face=3D"Times New Roman, serif">This somewhat provocative note was p=
osted earlier on the S8 Concepts forum, since it is largely related to temp=
lates and Concepts. =C2=A0As it did not provoke a response there, I thought=
it might be of some interest here. =C2=A0</font></p><p class=3D"MsoNormal"=
style=3D"line-height:normal"><span style=3D"font-family:"Times New Ro=
man",serif">This note suggests some generalization and simplification =
of C++ language syntax, largely based on extensions of what is currently in=
=E2=80=9CConcepts Lite=E2=80=9D.=C2=A0 =C2=A0There is some general discuss=
ion of reasons for what exists, and of future evolution. =C2=A0=C2=A0Since =
it is a rather long note for a forum entry, skipping to the Examples sectio=
n might provide a quick overview of some of the resulting possibilities.</s=
pan></p></div></blockquote><div><br>It's probably not a good idea to st=
art by telling the reader to jump to the end if they want to know what you&=
#39;re actually talking about.<br><br>One of the problems with this is that=
it's basically trying to tackle a bunch of syntactic changes, all of w=
hich have fundamentally different reasons and justifications. Each change i=
s really something that ought to have its own conversation; dumping them in=
the same thread/paper/etc makes that exceedingly difficult.<br></div></div=
></blockquote><div>=C2=A0</div><div>Clearly the suggestions do indeed need =
separate detailed and precise proposals. =C2=A0This is a somewhat different=
note than is usually found here. =C2=A0It attempts to suggest the possibil=
ity for rethinking a major syntax revision to dramatically increase the exp=
ressiveness and scope of fundamental C++ abstractions.=C2=A0<br></div><div>=
=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-lef=
t: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><=
div><br>And subjectively, I find your syntax's copious use of `#` to be=
like constantly getting poked in the eye.<br></div></div></blockquote><div=
>=C2=A0</div><div>Clear and simple distinctions among things that look alik=
e, but are fundamentally quite different, are useful. Something less intrus=
ive, such as ".", might work better. =C2=A0</div><blockquote clas=
s=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #c=
cc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><br>On your new function=
declaration syntax, I find your statement that the compiler can arbitraril=
y determine if a parameter should be taken by value or reference to be... d=
ubious. If a function takes a parameter by &&, how do you say that?=
It's an output parameter, but it's not like other output parameter=
s; the user is supposed to call `std::move` or the like to fill it in. Conc=
eptually, a && parameter is one that is taking an object that it wi=
ll move or forward from, not merely modify.<br></div></div></blockquote><di=
v>=C2=A0<br></div><div>This is a good example of the gist of my post. =C2=
=A0Flagging a parameter as && is an ambiguous extension =C2=A0(univ=
ersal reference / rvalue reference) of what seems like a somewhat awkward c=
onvention already. =C2=A0The suggestion is for syntax that more clearly ind=
icates intent. =C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margi=
n: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><di=
v dir=3D"ltr"><div><br>Furthermore, there is no discussion about how such d=
eclarations would be handled at the ABI level. If you're going to radic=
ally alter how we declare functions, you need to think about these kinds of=
issues.<br></div></div></blockquote><div>=C2=A0</div><div>A related post o=
n S8 discusses the possibility of providing a basic header file (with or wi=
thout Concepts), to permit template compilation, and then subsequent type s=
afe binding of the resulting compilation to actual parameters, either at co=
mpile or run time. =C2=A0The approach, as for current abstract types, relie=
s on manipulation of resulting "vtables".=C2=A0</div><blockquote =
class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1p=
x #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><br>As for your disc=
ussion of naming, scopes, and name prefixes... that seems to defeat the who=
le purpose of having name scope reach be implicit. The whole point of havin=
g such scopes is that they're implicit; that you don't have to use =
special syntax to say if a name is captured in a lambda or not. That your c=
ode can look <i>normal</i>, that it doesn't explicitly have to call out=
things that are by definition implicit.<br><br>That's a good thing.<br=
></div></div></blockquote><div>=C2=A0</div><div>Yes, there are significant =
trade-offs to be made between concise syntax (think APL) and verbose syntax=
with explicit redundancy (think COBOL and XML). =C2=A0Choices depend on th=
e intended audience for the code. =C2=A0Mappings to and from common "a=
bstract syntax" is an intriguing possibility, where this can lend diff=
erent aspects of clarity. =C2=A0<br></div><blockquote class=3D"gmail_quote"=
style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-=
left: 1ex;"><div dir=3D"ltr"><br></div></blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/1d3d0199-1287-4ce2-9bbb-6623e700828c%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/1d3d0199-1287-4ce2-9bbb-6623e700828c=
%40isocpp.org</a>.<br />
------=_Part_219_1381022110.1481215948211--
------=_Part_218_696324288.1481215948211--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Thu, 8 Dec 2016 09:25:22 -0800 (PST)
Raw View
------=_Part_308_1020216664.1481217922971
Content-Type: multipart/alternative;
boundary="----=_Part_309_83948759.1481217922972"
------=_Part_309_83948759.1481217922972
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Thursday, December 8, 2016 at 11:52:28 AM UTC-5, billc...@gmail.com=20
wrote:
>
> On Wednesday, November 30, 2016 at 8:07:18 PM UTC-5, Nicol Bolas wrote:
>>
>> On Wednesday, November 30, 2016 at 6:51:36 PM UTC-5, billc...@gmail.com=
=20
>> wrote:
>>>
>>> Introduction
>>>
>>> This somewhat provocative note was posted earlier on the S8 Concepts=20
>>> forum, since it is largely related to templates and Concepts. As it di=
d=20
>>> not provoke a response there, I thought it might be of some interest he=
re. =20
>>>
>>> This note suggests some generalization and simplification of C++=20
>>> language syntax, largely based on extensions of what is currently in=20
>>> =E2=80=9CConcepts Lite=E2=80=9D. There is some general discussion of =
reasons for what=20
>>> exists, and of future evolution. Since it is a rather long note for a=
=20
>>> forum entry, skipping to the Examples section might provide a quick=20
>>> overview of some of the resulting possibilities.
>>>
>>
>> It's probably not a good idea to start by telling the reader to jump to=
=20
>> the end if they want to know what you're actually talking about.
>>
>> One of the problems with this is that it's basically trying to tackle a=
=20
>> bunch of syntactic changes, all of which have fundamentally different=20
>> reasons and justifications. Each change is really something that ought t=
o=20
>> have its own conversation; dumping them in the same thread/paper/etc mak=
es=20
>> that exceedingly difficult.
>>
> =20
> Clearly the suggestions do indeed need separate detailed and precise=20
> proposals. This is a somewhat different note than is usually found here.=
=20
> It attempts to suggest the possibility for rethinking a major syntax=20
> revision to dramatically increase the expressiveness and scope of=20
> fundamental C++ abstractions.=20
> =20
>
>>
>> And subjectively, I find your syntax's copious use of `#` to be like=20
>> constantly getting poked in the eye.
>>
> =20
> Clear and simple distinctions among things that look alike, but are=20
> fundamentally quite different, are useful. Something less intrusive, such=
=20
> as ".", might work better. =20
>
>>
>> On your new function declaration syntax, I find your statement that the=
=20
>> compiler can arbitrarily determine if a parameter should be taken by val=
ue=20
>> or reference to be... dubious. If a function takes a parameter by &&, ho=
w=20
>> do you say that? It's an output parameter, but it's not like other outpu=
t=20
>> parameters; the user is supposed to call `std::move` or the like to fill=
it=20
>> in. Conceptually, a && parameter is one that is taking an object that it=
=20
>> will move or forward from, not merely modify.
>>
> =20
> This is a good example of the gist of my post. Flagging a parameter as &=
&=20
> is an ambiguous extension (universal reference / rvalue reference) of wh=
at=20
> seems like a somewhat awkward convention already. The suggestion is for=
=20
> syntax that more clearly indicates intent.
>
The intent behind taking a parameter by a concrete rvalue reference is to=
=20
move from it. The intent behind taking a parameter by forwarding reference=
=20
(template-deduced `&&`) is to *forward it*, typically to a function that=20
the caller of this function knows about. In the latter case, the user=20
therefore knows exactly how to treat each parameter it is given: as if they=
=20
had called the function being forwarded to themselves.
In either case, the intent is clear. I don't think we have a big problem=20
with people expecting moves from forwarding reference parameters that don't=
=20
actually get moved from.
Furthermore, there is no discussion about how such declarations would be=20
>> handled at the ABI level. If you're going to radically alter how we decl=
are=20
>> functions, you need to think about these kinds of issues.
>>
> =20
> A related post on S8 discusses the possibility of providing a basic heade=
r=20
> file (with or without Concepts), to permit template compilation, and then=
=20
> subsequent type safe binding of the resulting compilation to actual=20
> parameters, either at compile or run time. The approach, as for current=
=20
> abstract types, relies on manipulation of resulting "vtables".
>
That essentially answered nothing about how things get handled at the ABI=
=20
level.
The fundamental ABI question for functions is this: you have a function.=20
That function has some "input" and "output" parameters. What is the=20
assembly-level interface between the caller and the callee? Is a particular=
=20
parameter assigned a register or a spot of memory? Is that memory a pointer=
=20
to some object or is it the object itself?
And here's the big part: you must be able to make this determination with *=
just=20
a function's signature*. You cannot rely on *any* details of that=20
function's implementation.
Yes, there are significant trade-offs to be made between concise syntax=20
> (think APL) and verbose syntax with explicit redundancy (think COBOL and=
=20
> XML). Choices depend on the intended audience for the code. Mappings to=
=20
> and from common "abstract syntax" is an intriguing possibility, where thi=
s=20
> can lend different aspects of clarity.
>
I'm not sure how having multiple *completely different* syntaxes in a=20
language is supposed to make the language *easier* to understand.
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/008231a5-8821-4381-aa4c-da1d7031e2fa%40isocpp.or=
g.
------=_Part_309_83948759.1481217922972
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Thursday, December 8, 2016 at 11:52:28 AM UTC-5, billc.=
...@gmail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;mar=
gin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D=
"ltr">On Wednesday, November 30, 2016 at 8:07:18 PM UTC-5, Nicol Bolas wrot=
e:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bor=
der-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">On Wednesday, No=
vember 30, 2016 at 6:51:36 PM UTC-5, <a>billc...@gmail.com</a> wrote:<block=
quote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left=
:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><h3><span style=3D"font-=
family:"Times New Roman",serif">Introduction</span></h3><p class=
=3D"MsoNormal" style=3D"line-height:normal"><font face=3D"Times New Roman, =
serif">This somewhat provocative note was posted earlier on the S8 Concepts=
forum, since it is largely related to templates and Concepts. =C2=A0As it =
did not provoke a response there, I thought it might be of some interest he=
re. =C2=A0</font></p><p class=3D"MsoNormal" style=3D"line-height:normal"><s=
pan style=3D"font-family:"Times New Roman",serif">This note sugge=
sts some generalization and simplification of C++ language syntax, largely =
based on extensions of what is currently in =E2=80=9CConcepts Lite=E2=80=9D=
..=C2=A0 =C2=A0There is some general discussion of reasons for what exists, =
and of future evolution. =C2=A0=C2=A0Since it is a rather long note for a f=
orum entry, skipping to the Examples section might provide a quick overview=
of some of the resulting possibilities.</span></p></div></blockquote><div>=
<br>It's probably not a good idea to start by telling the reader to jum=
p to the end if they want to know what you're actually talking about.<b=
r><br>One of the problems with this is that it's basically trying to ta=
ckle a bunch of syntactic changes, all of which have fundamentally differen=
t reasons and justifications. Each change is really something that ought to=
have its own conversation; dumping them in the same thread/paper/etc makes=
that exceedingly difficult.<br></div></div></blockquote><div>=C2=A0</div><=
div>Clearly the suggestions do indeed need separate detailed and precise pr=
oposals. =C2=A0This is a somewhat different note than is usually found here=
.. =C2=A0It attempts to suggest the possibility for rethinking a major synta=
x revision to dramatically increase the expressiveness and scope of fundame=
ntal C++ abstractions.=C2=A0<br></div><div>=C2=A0</div><blockquote class=3D=
"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc soli=
d;padding-left:1ex"><div dir=3D"ltr"><div><br>And subjectively, I find your=
syntax's copious use of `#` to be like constantly getting poked in the=
eye.<br></div></div></blockquote><div>=C2=A0</div><div>Clear and simple di=
stinctions among things that look alike, but are fundamentally quite differ=
ent, are useful. Something less intrusive, such as ".", might wor=
k better. =C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0;m=
argin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"l=
tr"><div><br>On your new function declaration syntax, I find your statement=
that the compiler can arbitrarily determine if a parameter should be taken=
by value or reference to be... dubious. If a function takes a parameter by=
&&, how do you say that? It's an output parameter, but it'=
s not like other output parameters; the user is supposed to call `std::move=
` or the like to fill it in. Conceptually, a && parameter is one th=
at is taking an object that it will move or forward from, not merely modify=
..<br></div></div></blockquote><div>=C2=A0<br></div><div>This is a good exam=
ple of the gist of my post. =C2=A0Flagging a parameter as && is an =
ambiguous extension =C2=A0(universal reference / rvalue reference) of what =
seems like a somewhat awkward convention already. =C2=A0The suggestion is f=
or syntax that more clearly indicates intent.<br></div></div></blockquote><=
div><br>The intent behind taking a parameter by a concrete rvalue reference=
is to move from it. The intent behind taking a parameter by forwarding ref=
erence (template-deduced `&&`) is to <i>forward it</i>, typically t=
o a function that the caller of this function knows about. In the latter ca=
se, the user therefore knows exactly how to treat each parameter it is give=
n: as if they had called the function being forwarded to themselves.<br><br=
>In either case, the intent is clear. I don't think we have a big probl=
em with people expecting moves from forwarding reference parameters that do=
n't actually get moved from.<br><br></div><blockquote class=3D"gmail_qu=
ote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padd=
ing-left: 1ex;"><div dir=3D"ltr"><div></div><blockquote class=3D"gmail_quot=
e" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-l=
eft:1ex"><div dir=3D"ltr"><div>Furthermore, there is no discussion about ho=
w such declarations would be handled at the ABI level. If you're going =
to radically alter how we declare functions, you need to think about these =
kinds of issues.<br></div></div></blockquote><div>=C2=A0</div><div>A relate=
d post on S8 discusses the possibility of providing a basic header file (wi=
th or without Concepts), to permit template compilation, and then subsequen=
t type safe binding of the resulting compilation to actual parameters, eith=
er at compile or run time. =C2=A0The approach, as for current abstract type=
s, relies on manipulation of resulting "vtables".</div></div></bl=
ockquote><div><br>That essentially answered nothing about how things get ha=
ndled at the ABI level.<br><br>The fundamental ABI question for functions i=
s this: you have a function. That function has some "input" and &=
quot;output" parameters. What is the assembly-level interface between =
the caller and the callee? Is a particular parameter assigned a register or=
a spot of memory? Is that memory a pointer to some object or is it the obj=
ect itself?<br><br>And here's the big part: you must be able to make th=
is determination with <i>just a function's signature</i>. You cannot re=
ly on <i>any</i> details of that function's implementation.<br><br><blo=
ckquote class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; border-le=
ft: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Yes, there are signif=
icant trade-offs to be made between concise syntax=20
(think APL) and verbose syntax with explicit redundancy (think COBOL and
XML). =C2=A0Choices depend on the intended audience for the code. =C2=A0Ma=
ppings=20
to and from common "abstract syntax" is an intriguing possibility=
, where
this can lend different aspects of clarity.<br></blockquote><div><br>I'=
;m not sure how having multiple <i>completely different</i> syntaxes in a l=
anguage is supposed to make the language <i>easier</i> to understand.<br></=
div></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left:=
0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"></d=
iv></blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/008231a5-8821-4381-aa4c-da1d7031e2fa%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/008231a5-8821-4381-aa4c-da1d7031e2fa=
%40isocpp.org</a>.<br />
------=_Part_309_83948759.1481217922972--
------=_Part_308_1020216664.1481217922971--
.
Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date: Thu, 8 Dec 2016 16:40:32 -0800 (PST)
Raw View
------=_Part_1104_1145096071.1481244033073
Content-Type: multipart/alternative;
boundary="----=_Part_1105_1971484202.1481244033073"
------=_Part_1105_1971484202.1481244033073
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Thursday, December 8, 2016 at 8:52:28 AM UTC-8, billc...@gmail.com wrote=
:
>
> On Wednesday, November 30, 2016 at 8:07:18 PM UTC-5, Nicol Bolas wrote:
>>
>> On your new function declaration syntax, I find your statement that the=
=20
>> compiler can arbitrarily determine if a parameter should be taken by val=
ue=20
>> or reference to be... dubious. If a function takes a parameter by &&, ho=
w=20
>> do you say that? It's an output parameter, but it's not like other outpu=
t=20
>> parameters; the user is supposed to call `std::move` or the like to fill=
it=20
>> in. Conceptually, a && parameter is one that is taking an object that it=
=20
>> will move or forward from, not merely modify.
>>
> =20
> This is a good example of the gist of my post. Flagging a parameter as &=
&=20
> is an ambiguous extension (universal reference / rvalue reference) of wh=
at=20
> seems like a somewhat awkward convention already. The suggestion is for=
=20
> syntax that more clearly indicates intent.
>
This is a tangent, but FWIW, I don't think there's anything awkward about=
=20
the "&&" syntax for rvalue references and forwarding references. The only=
=20
background information you need in order to understand forwarding=20
references is that an "rvalue" is something that's expendable =E2=80=94 nob=
ody else=20
in the program will care if its innards are ripped out. From this one piece=
=20
of information, we can deduce reference collapsing (i.e., an rvalue=20
reference of an lvalue reference *must* be an lvalue reference, because the=
=20
caller still cares about the referenced object), and from reference=20
collapsing we can deduce the syntax for perfect forwarding.
This isn't a historical explanation of how that syntax was invented =E2=80=
=94 IIUC,=20
it took years and many papers to invent perfect forwarding =E2=80=94 but no=
w that=20
it *has* been invented, it turns out to all fit together very neatly, such=
=20
that you can explain it in a couple of minutes.
C++ has plenty of warts, but move semantics aren't one of them. :)
=E2=80=93Arthur
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/ee9cd156-8358-43b4-92bd-93a04eff1d11%40isocpp.or=
g.
------=_Part_1105_1971484202.1481244033073
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Thursday, December 8, 2016 at 8:52:28 AM UTC-8, billc..=
..@gmail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;marg=
in-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"=
ltr">On Wednesday, November 30, 2016 at 8:07:18 PM UTC-5, Nicol Bolas wrote=
:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>On your new =
function declaration syntax, I find your statement that the compiler can ar=
bitrarily determine if a parameter should be taken by value or reference to=
be... dubious. If a function takes a parameter by &&, how do you s=
ay that? It's an output parameter, but it's not like other output p=
arameters; the user is supposed to call `std::move` or the like to fill it =
in. Conceptually, a && parameter is one that is taking an object th=
at it will move or forward from, not merely modify.<br></div></div></blockq=
uote><div>=C2=A0<br></div><div>This is a good example of the gist of my pos=
t. =C2=A0Flagging a parameter as && is an ambiguous extension =C2=
=A0(universal reference / rvalue reference) of what seems like a somewhat a=
wkward convention already. =C2=A0The suggestion is for syntax that more cle=
arly indicates intent.</div></div></blockquote><div><br></div><div>This is =
a tangent, but FWIW, I don't think there's anything awkward about t=
he "&&" syntax for rvalue references and forwarding refer=
ences. The only background information you need in order to understand forw=
arding references is that an "rvalue" is something that's exp=
endable =E2=80=94 nobody else in the program will care if its innards are r=
ipped out. From this one piece of information, we can deduce reference coll=
apsing (i.e., an rvalue reference of an lvalue reference <i>must</i> be an =
lvalue reference, because the caller still cares about the referenced objec=
t), and from reference collapsing we can deduce the syntax for perfect forw=
arding.</div><div>This isn't a historical explanation of how that synta=
x was invented =E2=80=94 IIUC, it took years and many papers to invent perf=
ect forwarding =E2=80=94 but now that it <i>has</i> been invented, it turns=
out to all fit together very neatly, such that you can explain it in a cou=
ple of minutes.</div><div>C++ has plenty of warts, but move semantics aren&=
#39;t one of them. :)</div><div><br></div><div>=E2=80=93Arthur</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/ee9cd156-8358-43b4-92bd-93a04eff1d11%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/ee9cd156-8358-43b4-92bd-93a04eff1d11=
%40isocpp.org</a>.<br />
------=_Part_1105_1971484202.1481244033073--
------=_Part_1104_1145096071.1481244033073--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Thu, 8 Dec 2016 18:06:08 -0800 (PST)
Raw View
------=_Part_423_1932089655.1481249168996
Content-Type: multipart/alternative;
boundary="----=_Part_424_596790485.1481249168996"
------=_Part_424_596790485.1481249168996
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On Thursday, December 8, 2016 at 7:40:33 PM UTC-5, Arthur O'Dwyer wrote:
>
> On Thursday, December 8, 2016 at 8:52:28 AM UTC-8, billc...@gmail.com=20
> wrote:
>>
>> On Wednesday, November 30, 2016 at 8:07:18 PM UTC-5, Nicol Bolas wrote:
>>>
>>> On your new function declaration syntax, I find your statement that the=
=20
>>> compiler can arbitrarily determine if a parameter should be taken by va=
lue=20
>>> or reference to be... dubious. If a function takes a parameter by &&, h=
ow=20
>>> do you say that? It's an output parameter, but it's not like other outp=
ut=20
>>> parameters; the user is supposed to call `std::move` or the like to fil=
l it=20
>>> in. Conceptually, a && parameter is one that is taking an object that i=
t=20
>>> will move or forward from, not merely modify.
>>>
>> =20
>> This is a good example of the gist of my post. Flagging a parameter as=
=20
>> && is an ambiguous extension (universal reference / rvalue reference) o=
f=20
>> what seems like a somewhat awkward convention already. The suggestion i=
s=20
>> for syntax that more clearly indicates intent.
>>
>
> This is a tangent, but FWIW, I don't think there's anything awkward about=
=20
> the "&&" syntax for rvalue references and forwarding references. The only=
=20
> background information you need in order to understand forwarding=20
> references is that an "rvalue" is something that's expendable =E2=80=94 n=
obody else=20
> in the program will care if its innards are ripped out. From this one pie=
ce=20
> of information, we can deduce reference collapsing (i.e., an rvalue=20
> reference of an lvalue reference *must* be an lvalue reference, because=
=20
> the caller still cares about the referenced object),
>
But that presupposes template argument deduction of an argument as a=20
reference, rather than just deducing the `T` as a `T`. That is, it assumes=
=20
that given:
some_type some_value =3D ...;
template<typename T>
void foo(T &&t);
That when you call it with `foo(some_value)`, you want to call=20
`foo<some_type&>(some_value)` instead of `foo<some_type>(some_value)`.=20
After all, `some_value` is not necessarily a reference. It's only the=20
template argument deduction rules that will deduce the `T` as a reference=
=20
type.
After all, if you have this:
template<typename T>
void bar(T t);
Calling `bar(some_value)` will deduce `T` as `some_type`, not as=20
`some_type&`.
The rule that differentiates them is [temp.deduct.call]/3, which explicitly=
=20
states:
> A forwarding reference is an rvalue reference to a cv-unqualified=20
template parameter that does not represent a template parameter of a class=
=20
template (during class template argument deduction (13.3.1.8)). If P is a=
=20
forwarding reference and the argument is an lvalue, the type =E2=80=9Clvalu=
e=20
reference to A =E2=80=9D is used in place of A for type deduction.
So you can't say that there's no other special rules in play other than=20
reference collapsing. Without this other rule, forwarding references would=
=20
work incorrectly on lvalues, as they would deduce to rvalue references.
Not to mention, there are cases when you *really do* want `foo` to mean "a=
=20
function which can take an rvalue reference to any type" rather than "a=20
function which takes a reference to any type". These are two different=20
concepts, usable at two different times, so it's not unreasonable to want=
=20
two different syntaxes for them.
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/497512d7-be66-47d9-9d22-0665109839a0%40isocpp.or=
g.
------=_Part_424_596790485.1481249168996
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Thursday, December 8, 2016 at 7:40:33 PM UTC-5,=
Arthur O'Dwyer wrote:<blockquote class=3D"gmail_quote" style=3D"margin=
: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div=
dir=3D"ltr">On Thursday, December 8, 2016 at 8:52:28 AM UTC-8, <a>billc...=
@gmail.com</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;ma=
rgin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r">On Wednesday, November 30, 2016 at 8:07:18 PM UTC-5, Nicol Bolas wrote:<=
blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border=
-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>On your new fu=
nction declaration syntax, I find your statement that the compiler can arbi=
trarily determine if a parameter should be taken by value or reference to b=
e... dubious. If a function takes a parameter by &&, how do you say=
that? It's an output parameter, but it's not like other output par=
ameters; the user is supposed to call `std::move` or the like to fill it in=
.. Conceptually, a && parameter is one that is taking an object that=
it will move or forward from, not merely modify.<br></div></div></blockquo=
te><div>=C2=A0<br></div><div>This is a good example of the gist of my post.=
=C2=A0Flagging a parameter as && is an ambiguous extension =C2=A0(=
universal reference / rvalue reference) of what seems like a somewhat awkwa=
rd convention already. =C2=A0The suggestion is for syntax that more clearly=
indicates intent.</div></div></blockquote><div><br></div><div>This is a ta=
ngent, but FWIW, I don't think there's anything awkward about the &=
quot;&&" syntax for rvalue references and forwarding reference=
s. The only background information you need in order to understand forwardi=
ng references is that an "rvalue" is something that's expenda=
ble =E2=80=94 nobody else in the program will care if its innards are rippe=
d out. From this one piece of information, we can deduce reference collapsi=
ng (i.e., an rvalue reference of an lvalue reference <i>must</i> be an lval=
ue reference, because the caller still cares about the referenced object),<=
/div></div></blockquote><div><br>But that presupposes template argument ded=
uction of an argument as a reference, rather than just deducing the `T` as =
a `T`. That is, it assumes that given:<br><br><div style=3D"background-colo=
r: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: soli=
d; border-width: 1px; overflow-wrap: break-word;" class=3D"prettyprint"><co=
de class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"color=
: #000;" class=3D"styled-by-prettify">some_type some_value </span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">...;</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"><br><br></span><span style=3D"color: #008;" clas=
s=3D"styled-by-prettify">template</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify"><</span><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">typename</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> T</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">></span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"><br></span><span style=3D"color: #008;" class=3D"styled-by-prettify">void=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> foo</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify">T </span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">&&</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify">t</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">);</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"><br></span></div></code></div><br>That when you ca=
ll it with `foo(some_value)`, you want to call `foo<some_type&>(s=
ome_value)` instead of `foo<some_type>(some_value)`. After all, `some=
_value` is not necessarily a reference. It's only the template argument=
deduction rules that will deduce the `T` as a reference type.<br><br>After=
all, if you have this:<br><br><div style=3D"background-color: rgb(250, 250=
, 250); border-color: rgb(187, 187, 187); border-style: solid; border-width=
: 1px; overflow-wrap: break-word;" class=3D"prettyprint"><code class=3D"pre=
ttyprint"><div class=3D"subprettyprint"><span style=3D"color: #008;" class=
=3D"styled-by-prettify">template</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify"><</span><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">typename</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> T</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">></span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"><br></span><span style=3D"color: #008;" class=3D"styled-by-prettify">void=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> bar</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify">T t</span><span style=3D"=
color: #660;" class=3D"styled-by-prettify">);</span></div></code></div><br>=
Calling `bar(some_value)` will deduce `T` as `some_type`, not as `some_type=
&`.<br><br>The rule that differentiates them is [temp.deduct.call]/3, w=
hich explicitly states:<br><br>> A forwarding reference is an rvalue ref=
erence to a cv-unqualified template parameter that does not represent a tem=
plate parameter of a class template (during class template argument deducti=
on (13.3.1.8)). If P is a forwarding reference and the argument is an lvalu=
e, the type =E2=80=9Clvalue reference to A =E2=80=9D is used in place of A =
for type deduction.<br><br>So you can't say that there's no other s=
pecial rules in play other than reference collapsing. Without this other ru=
le, forwarding references would work incorrectly on lvalues, as they would =
deduce to rvalue references.<br><br>Not to mention, there are cases when yo=
u <i>really do</i> want `foo` to mean "a function which can take an rv=
alue reference to any type" rather than "a function which takes a=
reference to any type". These are two different concepts, usable at t=
wo different times, so it's not unreasonable to want two different synt=
axes for them.</div><br></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/497512d7-be66-47d9-9d22-0665109839a0%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/497512d7-be66-47d9-9d22-0665109839a0=
%40isocpp.org</a>.<br />
------=_Part_424_596790485.1481249168996--
------=_Part_423_1932089655.1481249168996--
.