diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 75be36474222f..8718c264bb5d3 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -41,7 +41,6 @@ import { BindableObjectDefinePropertyCall, BindableStaticNameExpression, BindingElement, - BindingElementGrandparent, BindingName, BindingPattern, bindSourceFile, @@ -11527,12 +11526,17 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // Return the type of a binding element parent. We check SymbolLinks first to see if a type has been // assigned by contextual typing. - function getTypeForBindingElementParent(node: BindingElementGrandparent, checkMode: CheckMode) { - if (checkMode !== CheckMode.Normal) { - return getTypeForVariableLikeDeclaration(node, /*includeOptionality*/ false, checkMode); + function getTypeForBindingElementParent(node: BindingElement) { + const grandparent = node.parent.parent; + const rootParameter = tryGetRootParameterDeclaration(node); + if (rootParameter) { + const symbol = getSymbolOfDeclaration(grandparent); + const contextualParameterType = symbol && getSymbolLinks(symbol).type; + if (contextualParameterType) { + return contextualParameterType; + } } - const symbol = getSymbolOfDeclaration(node); - return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, /*includeOptionality*/ false, checkMode); + return getTypeForVariableLikeDeclaration(grandparent, /*includeOptionality*/ false, node.dotDotDotToken ? CheckMode.RestBindingElement : CheckMode.Normal); } function getRestType(source: Type, properties: PropertyName[], symbol: Symbol | undefined): Type { @@ -11665,8 +11669,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { /** Return the inferred type for a binding element */ function getTypeForBindingElement(declaration: BindingElement): Type | undefined { - const checkMode = declaration.dotDotDotToken ? CheckMode.RestBindingElement : CheckMode.Normal; - const parentType = getTypeForBindingElementParent(declaration.parent.parent, checkMode); + const parentType = getTypeForBindingElementParent(declaration); return parentType && getBindingElementTypeFromParentType(declaration, parentType, /*noTupleBoundsCheck*/ false); } @@ -30811,7 +30814,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { const type = getTypeOfSymbol(symbol); const declaration = symbol.valueDeclaration; if (declaration) { - // If we have a non-rest binding element with no initializer declared as a const variable or a const-like + // If we have a binding element with no initializer declared as a const variable or a const-like // parameter (a parameter for which there are no assignments in the function body), and if the parent type // for the destructuring is a union type, one or more of the binding elements may represent discriminant // properties, and we want the effects of conditional checks on such discriminants to affect the types of @@ -30834,19 +30837,20 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // the binding pattern AST instance for '{ kind, payload }' as a pseudo-reference and narrow this reference // as if it occurred in the specified location. We then recompute the narrowed binding element type by // destructuring from the narrowed parent type. - if (isBindingElement(declaration) && !declaration.initializer && !declaration.dotDotDotToken && declaration.parent.elements.length >= 2) { + if (isBindingElement(declaration) && !declaration.initializer && declaration.parent.elements.length >= 2) { const parent = declaration.parent.parent; const rootDeclaration = getRootDeclaration(parent); if (rootDeclaration.kind === SyntaxKind.VariableDeclaration && getCombinedNodeFlagsCached(rootDeclaration) & NodeFlags.Constant || rootDeclaration.kind === SyntaxKind.Parameter) { const links = getNodeLinks(parent); if (!(links.flags & NodeCheckFlags.InCheckIdentifier)) { links.flags |= NodeCheckFlags.InCheckIdentifier; - const parentType = getTypeForBindingElementParent(parent, CheckMode.Normal); - const parentTypeConstraint = parentType && mapType(parentType, getBaseConstraintOrType); + const parentType = getTypeForBindingElementParent(declaration); + const parentNarrowableType = parentType && getNarrowableTypeForReference(parentType, location); + links.flags &= ~NodeCheckFlags.InCheckIdentifier; - if (parentTypeConstraint && parentTypeConstraint.flags & TypeFlags.Union && !(rootDeclaration.kind === SyntaxKind.Parameter && isSomeSymbolAssigned(rootDeclaration))) { + if (parentNarrowableType && parentNarrowableType.flags & TypeFlags.Union && !(rootDeclaration.kind === SyntaxKind.Parameter && isSomeSymbolAssigned(rootDeclaration))) { const pattern = declaration.parent; - const narrowedType = getFlowTypeOfReference(pattern, parentTypeConstraint, parentTypeConstraint, /*flowContainer*/ undefined, location.flowNode); + const narrowedType = getFlowTypeOfReference(pattern, parentNarrowableType, parentNarrowableType, /*flowContainer*/ undefined, location.flowNode); if (narrowedType.flags & TypeFlags.Never) { return neverType; } @@ -44917,8 +44921,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // check private/protected variable access const parent = node.parent.parent; - const parentCheckMode = node.dotDotDotToken ? CheckMode.RestBindingElement : CheckMode.Normal; - const parentType = getTypeForBindingElementParent(parent, parentCheckMode); + const parentType = getTypeForBindingElementParent(node); const name = node.propertyName || node.name; if (parentType && !isBindingPattern(name)) { const exprType = getLiteralTypeFromPropertyName(name); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 1cfe3e04ba68d..b1a01425008a8 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1911,9 +1911,6 @@ export interface BindingElement extends NamedDeclaration, FlowContainer { readonly initializer?: Expression; // Optional initializer } -/** @internal */ -export type BindingElementGrandparent = BindingElement["parent"]["parent"]; - // dprint-ignore export interface PropertySignature extends TypeElement, JSDocContainer { readonly kind: SyntaxKind.PropertySignature; diff --git a/tests/baselines/reference/arrayDestructuringInSwitch1.symbols b/tests/baselines/reference/arrayDestructuringInSwitch1.symbols index 1218fb03d02f2..96664f670e4ed 100644 --- a/tests/baselines/reference/arrayDestructuringInSwitch1.symbols +++ b/tests/baselines/reference/arrayDestructuringInSwitch1.symbols @@ -31,9 +31,9 @@ export function evaluate(expression: Expression): boolean { case 'and': { return operands.every((child) => evaluate(child)); ->operands.every : Symbol(Array.every, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>operands.every : Symbol(Array.every, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >operands : Symbol(operands, Decl(arrayDestructuringInSwitch1.ts, 5, 20)) ->every : Symbol(Array.every, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>every : Symbol(Array.every, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >child : Symbol(child, Decl(arrayDestructuringInSwitch1.ts, 8, 31)) >evaluate : Symbol(evaluate, Decl(arrayDestructuringInSwitch1.ts, 1, 84)) >child : Symbol(child, Decl(arrayDestructuringInSwitch1.ts, 8, 31)) diff --git a/tests/baselines/reference/arrayDestructuringInSwitch1.types b/tests/baselines/reference/arrayDestructuringInSwitch1.types index ec8ad2209e0b2..201627f79f332 100644 --- a/tests/baselines/reference/arrayDestructuringInSwitch1.types +++ b/tests/baselines/reference/arrayDestructuringInSwitch1.types @@ -46,12 +46,12 @@ export function evaluate(expression: Expression): boolean { return operands.every((child) => evaluate(child)); >operands.every((child) => evaluate(child)) : boolean > : ^^^^^^^ ->operands.every : { (predicate: (value: Expression, index: number, array: Expression[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: Expression, index: number, array: Expression[]) => unknown, thisArg?: any): boolean; } | { (predicate: (value: Expression, index: number, array: Expression[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: Expression, index: number, array: Expression[]) => unknown, thisArg?: any): boolean; } -> : ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^ ->operands : Expression[] | [Expression] -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->every : { (predicate: (value: Expression, index: number, array: Expression[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: Expression, index: number, array: Expression[]) => unknown, thisArg?: any): boolean; } | { (predicate: (value: Expression, index: number, array: Expression[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: Expression, index: number, array: Expression[]) => unknown, thisArg?: any): boolean; } -> : ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^ +>operands.every : { (predicate: (value: Expression, index: number, array: Expression[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: Expression, index: number, array: Expression[]) => unknown, thisArg?: any): boolean; } +> : ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^ +>operands : Expression[] +> : ^^^^^^^^^^^^ +>every : { (predicate: (value: Expression, index: number, array: Expression[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: Expression, index: number, array: Expression[]) => unknown, thisArg?: any): boolean; } +> : ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^ >(child) => evaluate(child) : (child: Expression) => boolean > : ^ ^^^^^^^^^^^^^^^^^^^^^^^^ >child : Expression @@ -76,8 +76,8 @@ export function evaluate(expression: Expression): boolean { > : ^ ^^ ^^^^^ >operands[0] : Expression > : ^^^^^^^^^^ ->operands : Expression[] | [Expression] -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>operands : [Expression] +> : ^^^^^^^^^^^^ >0 : 0 > : ^ } diff --git a/tests/baselines/reference/dependentDestructuredRestVariables1.symbols b/tests/baselines/reference/dependentDestructuredRestVariables1.symbols new file mode 100644 index 0000000000000..9847a8ce9180d --- /dev/null +++ b/tests/baselines/reference/dependentDestructuredRestVariables1.symbols @@ -0,0 +1,248 @@ +//// [tests/cases/conformance/controlFlow/dependentDestructuredRestVariables1.tsx] //// + +=== dependentDestructuredRestVariables1.tsx === +/// + +import React from "react"; +>React : Symbol(React, Decl(dependentDestructuredRestVariables1.tsx, 2, 6)) + +// https://github.com/microsoft/TypeScript/issues/46680 + +type Action1 = { kind: "A"; payload: number } | { kind: "B"; payload: string }; +>Action1 : Symbol(Action1, Decl(dependentDestructuredRestVariables1.tsx, 2, 26)) +>kind : Symbol(kind, Decl(dependentDestructuredRestVariables1.tsx, 6, 16)) +>payload : Symbol(payload, Decl(dependentDestructuredRestVariables1.tsx, 6, 27)) +>kind : Symbol(kind, Decl(dependentDestructuredRestVariables1.tsx, 6, 49)) +>payload : Symbol(payload, Decl(dependentDestructuredRestVariables1.tsx, 6, 60)) + +function example1({ kind, ...rest }: Action1) { +>example1 : Symbol(example1, Decl(dependentDestructuredRestVariables1.tsx, 6, 79)) +>kind : Symbol(kind, Decl(dependentDestructuredRestVariables1.tsx, 8, 19)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 8, 25)) +>Action1 : Symbol(Action1, Decl(dependentDestructuredRestVariables1.tsx, 2, 26)) + + if (kind === "A") { +>kind : Symbol(kind, Decl(dependentDestructuredRestVariables1.tsx, 8, 19)) + + rest.payload.toFixed(); +>rest.payload.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) +>rest.payload : Symbol(payload, Decl(dependentDestructuredRestVariables1.tsx, 6, 27)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 8, 25)) +>payload : Symbol(payload, Decl(dependentDestructuredRestVariables1.tsx, 6, 27)) +>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) + } + if (kind === "B") { +>kind : Symbol(kind, Decl(dependentDestructuredRestVariables1.tsx, 8, 19)) + + rest.payload.toUpperCase(); +>rest.payload.toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) +>rest.payload : Symbol(payload, Decl(dependentDestructuredRestVariables1.tsx, 6, 60)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 8, 25)) +>payload : Symbol(payload, Decl(dependentDestructuredRestVariables1.tsx, 6, 60)) +>toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) + } +} + +type Action2 = [kind: "A", payload: number] | [kind: "B", payload: string]; +>Action2 : Symbol(Action2, Decl(dependentDestructuredRestVariables1.tsx, 15, 1)) + +function example2([kind, ...rest]: Action2) { +>example2 : Symbol(example2, Decl(dependentDestructuredRestVariables1.tsx, 17, 75)) +>kind : Symbol(kind, Decl(dependentDestructuredRestVariables1.tsx, 19, 19)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 19, 24)) +>Action2 : Symbol(Action2, Decl(dependentDestructuredRestVariables1.tsx, 15, 1)) + + if (kind === "A") { +>kind : Symbol(kind, Decl(dependentDestructuredRestVariables1.tsx, 19, 19)) + + rest[0].toFixed(); +>rest[0].toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 19, 24)) +>0 : Symbol(0) +>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) + } + if (kind === "B") { +>kind : Symbol(kind, Decl(dependentDestructuredRestVariables1.tsx, 19, 19)) + + rest[0].toUpperCase(); +>rest[0].toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 19, 24)) +>0 : Symbol(0) +>toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --)) + } +} + +type Props1 = +>Props1 : Symbol(Props1, Decl(dependentDestructuredRestVariables1.tsx, 26, 1)) + + | ({ as: "div" } & React.ComponentPropsWithRef<"div">) +>as : Symbol(as, Decl(dependentDestructuredRestVariables1.tsx, 29, 6)) +>React : Symbol(React, Decl(dependentDestructuredRestVariables1.tsx, 2, 6)) +>ComponentPropsWithRef : Symbol(React.ComponentPropsWithRef, Decl(react16.d.ts, 2434, 25)) + + | ({ as: "span" } & React.ComponentPropsWithRef<"span">); +>as : Symbol(as, Decl(dependentDestructuredRestVariables1.tsx, 30, 6)) +>React : Symbol(React, Decl(dependentDestructuredRestVariables1.tsx, 2, 6)) +>ComponentPropsWithRef : Symbol(React.ComponentPropsWithRef, Decl(react16.d.ts, 2434, 25)) + +function MyComponent1({ as, ...rest }: Props1) { +>MyComponent1 : Symbol(MyComponent1, Decl(dependentDestructuredRestVariables1.tsx, 30, 59)) +>as : Symbol(as, Decl(dependentDestructuredRestVariables1.tsx, 32, 23)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 32, 27)) +>Props1 : Symbol(Props1, Decl(dependentDestructuredRestVariables1.tsx, 26, 1)) + + if (as === "div") { +>as : Symbol(as, Decl(dependentDestructuredRestVariables1.tsx, 32, 23)) + + return
; +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2546, 114)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 32, 27)) + } + if (as === "span") { +>as : Symbol(as, Decl(dependentDestructuredRestVariables1.tsx, 32, 23)) + + return ; +>span : Symbol(JSX.IntrinsicElements.span, Decl(react16.d.ts, 2609, 114)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 32, 27)) + } +} + +type Params1 = { +>Params1 : Symbol(Params1, Decl(dependentDestructuredRestVariables1.tsx, 39, 1)) + + foo: string; +>foo : Symbol(foo, Decl(dependentDestructuredRestVariables1.tsx, 41, 16)) + +} & ({ tag: "a"; type: number } | { tag: "b"; type: string }); +>tag : Symbol(tag, Decl(dependentDestructuredRestVariables1.tsx, 43, 6)) +>type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 43, 16)) +>tag : Symbol(tag, Decl(dependentDestructuredRestVariables1.tsx, 43, 35)) +>type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 43, 45)) + +const fn1 =

(params: P) => { +>fn1 : Symbol(fn1, Decl(dependentDestructuredRestVariables1.tsx, 45, 5)) +>P : Symbol(P, Decl(dependentDestructuredRestVariables1.tsx, 45, 13)) +>Params1 : Symbol(Params1, Decl(dependentDestructuredRestVariables1.tsx, 39, 1)) +>params : Symbol(params, Decl(dependentDestructuredRestVariables1.tsx, 45, 32)) +>P : Symbol(P, Decl(dependentDestructuredRestVariables1.tsx, 45, 13)) + + const { foo, ...rest } = params; +>foo : Symbol(foo, Decl(dependentDestructuredRestVariables1.tsx, 46, 9)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 46, 14)) +>params : Symbol(params, Decl(dependentDestructuredRestVariables1.tsx, 45, 32)) + + if (rest.tag === "a") { +>rest.tag : Symbol(tag, Decl(dependentDestructuredRestVariables1.tsx, 43, 6), Decl(dependentDestructuredRestVariables1.tsx, 43, 35)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 46, 14)) +>tag : Symbol(tag, Decl(dependentDestructuredRestVariables1.tsx, 43, 6), Decl(dependentDestructuredRestVariables1.tsx, 43, 35)) + + rest.type.toFixed(); // ok +>rest.type.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) +>rest.type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 43, 16)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 46, 14)) +>type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 43, 16)) +>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) + + return rest; // Omit +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 46, 14)) + } + + return undefined; +>undefined : Symbol(undefined) + +}; + +const fn2 =

({ foo, ...rest }: P) => { +>fn2 : Symbol(fn2, Decl(dependentDestructuredRestVariables1.tsx, 56, 5)) +>P : Symbol(P, Decl(dependentDestructuredRestVariables1.tsx, 56, 13)) +>Params1 : Symbol(Params1, Decl(dependentDestructuredRestVariables1.tsx, 39, 1)) +>foo : Symbol(foo, Decl(dependentDestructuredRestVariables1.tsx, 56, 33)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 56, 38)) +>P : Symbol(P, Decl(dependentDestructuredRestVariables1.tsx, 56, 13)) + + if (rest.tag === "a") { +>rest.tag : Symbol(tag, Decl(dependentDestructuredRestVariables1.tsx, 43, 6), Decl(dependentDestructuredRestVariables1.tsx, 43, 35)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 56, 38)) +>tag : Symbol(tag, Decl(dependentDestructuredRestVariables1.tsx, 43, 6), Decl(dependentDestructuredRestVariables1.tsx, 43, 35)) + + rest.type.toFixed(); // ok +>rest.type.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) +>rest.type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 43, 16)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 56, 38)) +>type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 43, 16)) +>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --)) + + return rest; // Omit +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 56, 38)) + } + + return undefined; +>undefined : Symbol(undefined) + +}; + +// https://github.com/microsoft/TypeScript/issues/53947 + +function ImageAvatar(props: { className?: string; src: string }) { +>ImageAvatar : Symbol(ImageAvatar, Decl(dependentDestructuredRestVariables1.tsx, 63, 2)) +>props : Symbol(props, Decl(dependentDestructuredRestVariables1.tsx, 67, 21)) +>className : Symbol(className, Decl(dependentDestructuredRestVariables1.tsx, 67, 29)) +>src : Symbol(src, Decl(dependentDestructuredRestVariables1.tsx, 67, 49)) + + return null; +} + +function InitialsAvatar(props: { className?: string; name: string }) { +>InitialsAvatar : Symbol(InitialsAvatar, Decl(dependentDestructuredRestVariables1.tsx, 69, 1)) +>props : Symbol(props, Decl(dependentDestructuredRestVariables1.tsx, 71, 24)) +>className : Symbol(className, Decl(dependentDestructuredRestVariables1.tsx, 71, 32)) +>name : Symbol(name, Decl(dependentDestructuredRestVariables1.tsx, 71, 52)) + + return null; +} + +type AvatarProps = +>AvatarProps : Symbol(AvatarProps, Decl(dependentDestructuredRestVariables1.tsx, 73, 1)) + + | { type: "image"; src: string; className: string } +>type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 76, 5)) +>src : Symbol(src, Decl(dependentDestructuredRestVariables1.tsx, 76, 20)) +>className : Symbol(className, Decl(dependentDestructuredRestVariables1.tsx, 76, 33)) + + | { type: "initials"; name: string; className: string }; +>type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 77, 5)) +>name : Symbol(name, Decl(dependentDestructuredRestVariables1.tsx, 77, 23)) +>className : Symbol(className, Decl(dependentDestructuredRestVariables1.tsx, 77, 37)) + +const Avatar = ({ type, className, ...rest }: AvatarProps) => { +>Avatar : Symbol(Avatar, Decl(dependentDestructuredRestVariables1.tsx, 79, 5)) +>type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 79, 17)) +>className : Symbol(className, Decl(dependentDestructuredRestVariables1.tsx, 79, 23)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 79, 34)) +>AvatarProps : Symbol(AvatarProps, Decl(dependentDestructuredRestVariables1.tsx, 73, 1)) + + if (type === "image") { +>type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 79, 17)) + + return ; +>ImageAvatar : Symbol(ImageAvatar, Decl(dependentDestructuredRestVariables1.tsx, 63, 2)) +>className : Symbol(className, Decl(dependentDestructuredRestVariables1.tsx, 81, 23)) +>className : Symbol(className, Decl(dependentDestructuredRestVariables1.tsx, 79, 23)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 79, 34)) + } + + if (type === "initials") { +>type : Symbol(type, Decl(dependentDestructuredRestVariables1.tsx, 79, 17)) + + return ; +>InitialsAvatar : Symbol(InitialsAvatar, Decl(dependentDestructuredRestVariables1.tsx, 69, 1)) +>className : Symbol(className, Decl(dependentDestructuredRestVariables1.tsx, 85, 26)) +>className : Symbol(className, Decl(dependentDestructuredRestVariables1.tsx, 79, 23)) +>rest : Symbol(rest, Decl(dependentDestructuredRestVariables1.tsx, 79, 34)) + } + + throw new Error(""); +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2022.error.d.ts, --, --)) + +}; + diff --git a/tests/baselines/reference/dependentDestructuredRestVariables1.types b/tests/baselines/reference/dependentDestructuredRestVariables1.types new file mode 100644 index 0000000000000..f2d787a7ed229 --- /dev/null +++ b/tests/baselines/reference/dependentDestructuredRestVariables1.types @@ -0,0 +1,429 @@ +//// [tests/cases/conformance/controlFlow/dependentDestructuredRestVariables1.tsx] //// + +=== Performance Stats === +Assignability cache: 2,500 +Type Count: 10,000 +Instantiation count: 100,000 +Symbol count: 50,000 + +=== dependentDestructuredRestVariables1.tsx === +/// + +import React from "react"; +>React : typeof React +> : ^^^^^^^^^^^^ + +// https://github.com/microsoft/TypeScript/issues/46680 + +type Action1 = { kind: "A"; payload: number } | { kind: "B"; payload: string }; +>Action1 : Action1 +> : ^^^^^^^ +>kind : "A" +> : ^^^ +>payload : number +> : ^^^^^^ +>kind : "B" +> : ^^^ +>payload : string +> : ^^^^^^ + +function example1({ kind, ...rest }: Action1) { +>example1 : ({ kind, ...rest }: Action1) => void +> : ^ ^^ ^^^^^^^^^ +>kind : "A" | "B" +> : ^^^^^^^^^ +>rest : { payload: number; } | { payload: string; } +> : ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ + + if (kind === "A") { +>kind === "A" : boolean +> : ^^^^^^^ +>kind : "A" | "B" +> : ^^^^^^^^^ +>"A" : "A" +> : ^^^ + + rest.payload.toFixed(); +>rest.payload.toFixed() : string +> : ^^^^^^ +>rest.payload.toFixed : (fractionDigits?: number) => string +> : ^ ^^^ ^^^^^ +>rest.payload : number +> : ^^^^^^ +>rest : { payload: number; } +> : ^^^^^^^^^^^ ^^^ +>payload : number +> : ^^^^^^ +>toFixed : (fractionDigits?: number) => string +> : ^ ^^^ ^^^^^ + } + if (kind === "B") { +>kind === "B" : boolean +> : ^^^^^^^ +>kind : "A" | "B" +> : ^^^^^^^^^ +>"B" : "B" +> : ^^^ + + rest.payload.toUpperCase(); +>rest.payload.toUpperCase() : string +> : ^^^^^^ +>rest.payload.toUpperCase : () => string +> : ^^^^^^ +>rest.payload : string +> : ^^^^^^ +>rest : { payload: string; } +> : ^^^^^^^^^^^ ^^^ +>payload : string +> : ^^^^^^ +>toUpperCase : () => string +> : ^^^^^^ + } +} + +type Action2 = [kind: "A", payload: number] | [kind: "B", payload: string]; +>Action2 : Action2 +> : ^^^^^^^ + +function example2([kind, ...rest]: Action2) { +>example2 : ([kind, ...rest]: Action2) => void +> : ^ ^^ ^^^^^^^^^ +>kind : "A" | "B" +> : ^^^^^^^^^ +>rest : [payload: number] | [payload: string] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + if (kind === "A") { +>kind === "A" : boolean +> : ^^^^^^^ +>kind : "A" | "B" +> : ^^^^^^^^^ +>"A" : "A" +> : ^^^ + + rest[0].toFixed(); +>rest[0].toFixed() : string +> : ^^^^^^ +>rest[0].toFixed : (fractionDigits?: number) => string +> : ^ ^^^ ^^^^^ +>rest[0] : number +> : ^^^^^^ +>rest : [payload: number] +> : ^^^^^^^^^^^^^^^^^ +>0 : 0 +> : ^ +>toFixed : (fractionDigits?: number) => string +> : ^ ^^^ ^^^^^ + } + if (kind === "B") { +>kind === "B" : boolean +> : ^^^^^^^ +>kind : "A" | "B" +> : ^^^^^^^^^ +>"B" : "B" +> : ^^^ + + rest[0].toUpperCase(); +>rest[0].toUpperCase() : string +> : ^^^^^^ +>rest[0].toUpperCase : () => string +> : ^^^^^^ +>rest[0] : string +> : ^^^^^^ +>rest : [payload: string] +> : ^^^^^^^^^^^^^^^^^ +>0 : 0 +> : ^ +>toUpperCase : () => string +> : ^^^^^^ + } +} + +type Props1 = +>Props1 : Props1 +> : ^^^^^^ + + | ({ as: "div" } & React.ComponentPropsWithRef<"div">) +>as : "div" +> : ^^^^^ +>React : any +> : ^^^ + + | ({ as: "span" } & React.ComponentPropsWithRef<"span">); +>as : "span" +> : ^^^^^^ +>React : any +> : ^^^ + +function MyComponent1({ as, ...rest }: Props1) { +>MyComponent1 : ({ as, ...rest }: Props1) => JSX.Element | undefined +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>as : "div" | "span" +> : ^^^^^^^^^^^^^^ +>rest : { children?: React.ReactNode; style?: React.CSSProperties | undefined; title?: string | undefined; defaultChecked?: boolean | undefined; defaultValue?: string | string[] | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; className?: string | undefined; contentEditable?: boolean | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: boolean | undefined; hidden?: boolean | undefined; id?: string | undefined; lang?: string | undefined; placeholder?: string | undefined; slot?: string | undefined; spellCheck?: boolean | undefined; tabIndex?: number | undefined; inputMode?: string | undefined; is?: string | undefined; radioGroup?: string | undefined; role?: string | undefined; about?: string | undefined; datatype?: string | undefined; inlist?: any; prefix?: string | undefined; property?: string | undefined; resource?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; security?: string | undefined; unselectable?: "on" | "off" | undefined; 'aria-activedescendant'?: string | undefined; 'aria-atomic'?: boolean | "false" | "true" | undefined; 'aria-autocomplete'?: "none" | "inline" | "list" | "both" | undefined; 'aria-busy'?: boolean | "false" | "true" | undefined; 'aria-checked'?: boolean | "false" | "mixed" | "true" | undefined; 'aria-colcount'?: number | undefined; 'aria-colindex'?: number | undefined; 'aria-colspan'?: number | undefined; 'aria-controls'?: string | undefined; 'aria-current'?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined; 'aria-describedby'?: string | undefined; 'aria-details'?: string | undefined; 'aria-disabled'?: boolean | "false" | "true" | undefined; 'aria-dropeffect'?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined; 'aria-errormessage'?: string | undefined; 'aria-expanded'?: boolean | "false" | "true" | undefined; 'aria-flowto'?: string | undefined; 'aria-grabbed'?: boolean | "false" | "true" | undefined; 'aria-haspopup'?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined; 'aria-hidden'?: boolean | "false" | "true" | undefined; 'aria-invalid'?: boolean | "false" | "true" | "grammar" | "spelling" | undefined; 'aria-keyshortcuts'?: string | undefined; 'aria-label'?: string | undefined; 'aria-labelledby'?: string | undefined; 'aria-level'?: number | undefined; 'aria-live'?: "off" | "assertive" | "polite" | undefined; 'aria-modal'?: boolean | "false" | "true" | undefined; 'aria-multiline'?: boolean | "false" | "true" | undefined; 'aria-multiselectable'?: boolean | "false" | "true" | undefined; 'aria-orientation'?: "horizontal" | "vertical" | undefined; 'aria-owns'?: string | undefined; 'aria-placeholder'?: string | undefined; 'aria-posinset'?: number | undefined; 'aria-pressed'?: boolean | "false" | "mixed" | "true" | undefined; 'aria-readonly'?: boolean | "false" | "true" | undefined; 'aria-relevant'?: "additions" | "additions text" | "all" | "removals" | "text" | undefined; 'aria-required'?: boolean | "false" | "true" | undefined; 'aria-roledescription'?: string | undefined; 'aria-rowcount'?: number | undefined; 'aria-rowindex'?: number | undefined; 'aria-rowspan'?: number | undefined; 'aria-selected'?: boolean | "false" | "true" | undefined; 'aria-setsize'?: number | undefined; 'aria-sort'?: "none" | "ascending" | "descending" | "other" | undefined; 'aria-valuemax'?: number | undefined; 'aria-valuemin'?: number | undefined; 'aria-valuenow'?: number | undefined; 'aria-valuetext'?: string | undefined; dangerouslySetInnerHTML?: { __html: string; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onError?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerEnterCapture?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerLeaveCapture?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; key?: React.Key | undefined; ref?: ((instance: HTMLDivElement | null) => any) | React.RefObject | undefined; } | { children?: React.ReactNode; style?: React.CSSProperties | undefined; title?: string | undefined; defaultChecked?: boolean | undefined; defaultValue?: string | string[] | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; className?: string | undefined; contentEditable?: boolean | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: boolean | undefined; hidden?: boolean | undefined; id?: string | undefined; lang?: string | undefined; placeholder?: string | undefined; slot?: string | undefined; spellCheck?: boolean | undefined; tabIndex?: number | undefined; inputMode?: string | undefined; is?: string | undefined; radioGroup?: string | undefined; role?: string | undefined; about?: string | undefined; datatype?: string | undefined; inlist?: any; prefix?: string | undefined; property?: string | undefined; resource?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; security?: string | undefined; unselectable?: "on" | "off" | undefined; 'aria-activedescendant'?: string | undefined; 'aria-atomic'?: boolean | "false" | "true" | undefined; 'aria-autocomplete'?: "none" | "inline" | "list" | "both" | undefined; 'aria-busy'?: boolean | "false" | "true" | undefined; 'aria-checked'?: boolean | "false" | "mixed" | "true" | undefined; 'aria-colcount'?: number | undefined; 'aria-colindex'?: number | undefined; 'aria-colspan'?: number | undefined; 'aria-controls'?: string | undefined; 'aria-current'?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined; 'aria-describedby'?: string | undefined; 'aria-details'?: string | undefined; 'aria-disabled'?: boolean | "false" | "true" | undefined; 'aria-dropeffect'?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined; 'aria-errormessage'?: string | undefined; 'aria-expanded'?: boolean | "false" | "true" | undefined; 'aria-flowto'?: string | undefined; 'aria-grabbed'?: boolean | "false" | "true" | undefined; 'aria-haspopup'?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined; 'aria-hidden'?: boolean | "false" | "true" | undefined; 'aria-invalid'?: boolean | "false" | "true" | "grammar" | "spelling" | undefined; 'aria-keyshortcuts'?: string | undefined; 'aria-label'?: string | undefined; 'aria-labelledby'?: string | undefined; 'aria-level'?: number | undefined; 'aria-live'?: "off" | "assertive" | "polite" | undefined; 'aria-modal'?: boolean | "false" | "true" | undefined; 'aria-multiline'?: boolean | "false" | "true" | undefined; 'aria-multiselectable'?: boolean | "false" | "true" | undefined; 'aria-orientation'?: "horizontal" | "vertical" | undefined; 'aria-owns'?: string | undefined; 'aria-placeholder'?: string | undefined; 'aria-posinset'?: number | undefined; 'aria-pressed'?: boolean | "false" | "mixed" | "true" | undefined; 'aria-readonly'?: boolean | "false" | "true" | undefined; 'aria-relevant'?: "additions" | "additions text" | "all" | "removals" | "text" | undefined; 'aria-required'?: boolean | "false" | "true" | undefined; 'aria-roledescription'?: string | undefined; 'aria-rowcount'?: number | undefined; 'aria-rowindex'?: number | undefined; 'aria-rowspan'?: number | undefined; 'aria-selected'?: boolean | "false" | "true" | undefined; 'aria-setsize'?: number | undefined; 'aria-sort'?: "none" | "ascending" | "descending" | "other" | undefined; 'aria-valuemax'?: number | undefined; 'aria-valuemin'?: number | undefined; 'aria-valuenow'?: number | undefined; 'aria-valuetext'?: string | undefined; dangerouslySetInnerHTML?: { __html: string; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onError?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerEnterCapture?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerLeaveCapture?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; key?: React.Key | undefined; ref?: ((instance: HTMLSpanElement | null) => any) | React.RefObject | undefined; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + if (as === "div") { +>as === "div" : boolean +> : ^^^^^^^ +>as : "div" | "span" +> : ^^^^^^^^^^^^^^ +>"div" : "div" +> : ^^^^^ + + return

; +>
: JSX.Element +> : ^^^^^^^^^^^ +>div : any +> : ^^^ +>rest : { children?: React.ReactNode; style?: React.CSSProperties | undefined; title?: string | undefined; defaultChecked?: boolean | undefined; defaultValue?: string | string[] | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; className?: string | undefined; contentEditable?: boolean | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: boolean | undefined; hidden?: boolean | undefined; id?: string | undefined; lang?: string | undefined; placeholder?: string | undefined; slot?: string | undefined; spellCheck?: boolean | undefined; tabIndex?: number | undefined; inputMode?: string | undefined; is?: string | undefined; radioGroup?: string | undefined; role?: string | undefined; about?: string | undefined; datatype?: string | undefined; inlist?: any; prefix?: string | undefined; property?: string | undefined; resource?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; security?: string | undefined; unselectable?: "on" | "off" | undefined; 'aria-activedescendant'?: string | undefined; 'aria-atomic'?: boolean | "false" | "true" | undefined; 'aria-autocomplete'?: "none" | "inline" | "list" | "both" | undefined; 'aria-busy'?: boolean | "false" | "true" | undefined; 'aria-checked'?: boolean | "false" | "mixed" | "true" | undefined; 'aria-colcount'?: number | undefined; 'aria-colindex'?: number | undefined; 'aria-colspan'?: number | undefined; 'aria-controls'?: string | undefined; 'aria-current'?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined; 'aria-describedby'?: string | undefined; 'aria-details'?: string | undefined; 'aria-disabled'?: boolean | "false" | "true" | undefined; 'aria-dropeffect'?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined; 'aria-errormessage'?: string | undefined; 'aria-expanded'?: boolean | "false" | "true" | undefined; 'aria-flowto'?: string | undefined; 'aria-grabbed'?: boolean | "false" | "true" | undefined; 'aria-haspopup'?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined; 'aria-hidden'?: boolean | "false" | "true" | undefined; 'aria-invalid'?: boolean | "false" | "true" | "grammar" | "spelling" | undefined; 'aria-keyshortcuts'?: string | undefined; 'aria-label'?: string | undefined; 'aria-labelledby'?: string | undefined; 'aria-level'?: number | undefined; 'aria-live'?: "off" | "assertive" | "polite" | undefined; 'aria-modal'?: boolean | "false" | "true" | undefined; 'aria-multiline'?: boolean | "false" | "true" | undefined; 'aria-multiselectable'?: boolean | "false" | "true" | undefined; 'aria-orientation'?: "horizontal" | "vertical" | undefined; 'aria-owns'?: string | undefined; 'aria-placeholder'?: string | undefined; 'aria-posinset'?: number | undefined; 'aria-pressed'?: boolean | "false" | "mixed" | "true" | undefined; 'aria-readonly'?: boolean | "false" | "true" | undefined; 'aria-relevant'?: "additions" | "additions text" | "all" | "removals" | "text" | undefined; 'aria-required'?: boolean | "false" | "true" | undefined; 'aria-roledescription'?: string | undefined; 'aria-rowcount'?: number | undefined; 'aria-rowindex'?: number | undefined; 'aria-rowspan'?: number | undefined; 'aria-selected'?: boolean | "false" | "true" | undefined; 'aria-setsize'?: number | undefined; 'aria-sort'?: "none" | "ascending" | "descending" | "other" | undefined; 'aria-valuemax'?: number | undefined; 'aria-valuemin'?: number | undefined; 'aria-valuenow'?: number | undefined; 'aria-valuetext'?: string | undefined; dangerouslySetInnerHTML?: { __html: string; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onError?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerEnterCapture?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerLeaveCapture?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; key?: React.Key | undefined; ref?: ((instance: HTMLDivElement | null) => any) | React.RefObject | undefined; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + } + if (as === "span") { +>as === "span" : boolean +> : ^^^^^^^ +>as : "span" +> : ^^^^^^ +>"span" : "span" +> : ^^^^^^ + + return ; +> : JSX.Element +> : ^^^^^^^^^^^ +>span : any +> : ^^^ +>rest : { children?: React.ReactNode; style?: React.CSSProperties | undefined; title?: string | undefined; defaultChecked?: boolean | undefined; defaultValue?: string | string[] | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; className?: string | undefined; contentEditable?: boolean | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: boolean | undefined; hidden?: boolean | undefined; id?: string | undefined; lang?: string | undefined; placeholder?: string | undefined; slot?: string | undefined; spellCheck?: boolean | undefined; tabIndex?: number | undefined; inputMode?: string | undefined; is?: string | undefined; radioGroup?: string | undefined; role?: string | undefined; about?: string | undefined; datatype?: string | undefined; inlist?: any; prefix?: string | undefined; property?: string | undefined; resource?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; security?: string | undefined; unselectable?: "on" | "off" | undefined; 'aria-activedescendant'?: string | undefined; 'aria-atomic'?: boolean | "false" | "true" | undefined; 'aria-autocomplete'?: "none" | "inline" | "list" | "both" | undefined; 'aria-busy'?: boolean | "false" | "true" | undefined; 'aria-checked'?: boolean | "false" | "mixed" | "true" | undefined; 'aria-colcount'?: number | undefined; 'aria-colindex'?: number | undefined; 'aria-colspan'?: number | undefined; 'aria-controls'?: string | undefined; 'aria-current'?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined; 'aria-describedby'?: string | undefined; 'aria-details'?: string | undefined; 'aria-disabled'?: boolean | "false" | "true" | undefined; 'aria-dropeffect'?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined; 'aria-errormessage'?: string | undefined; 'aria-expanded'?: boolean | "false" | "true" | undefined; 'aria-flowto'?: string | undefined; 'aria-grabbed'?: boolean | "false" | "true" | undefined; 'aria-haspopup'?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined; 'aria-hidden'?: boolean | "false" | "true" | undefined; 'aria-invalid'?: boolean | "false" | "true" | "grammar" | "spelling" | undefined; 'aria-keyshortcuts'?: string | undefined; 'aria-label'?: string | undefined; 'aria-labelledby'?: string | undefined; 'aria-level'?: number | undefined; 'aria-live'?: "off" | "assertive" | "polite" | undefined; 'aria-modal'?: boolean | "false" | "true" | undefined; 'aria-multiline'?: boolean | "false" | "true" | undefined; 'aria-multiselectable'?: boolean | "false" | "true" | undefined; 'aria-orientation'?: "horizontal" | "vertical" | undefined; 'aria-owns'?: string | undefined; 'aria-placeholder'?: string | undefined; 'aria-posinset'?: number | undefined; 'aria-pressed'?: boolean | "false" | "mixed" | "true" | undefined; 'aria-readonly'?: boolean | "false" | "true" | undefined; 'aria-relevant'?: "additions" | "additions text" | "all" | "removals" | "text" | undefined; 'aria-required'?: boolean | "false" | "true" | undefined; 'aria-roledescription'?: string | undefined; 'aria-rowcount'?: number | undefined; 'aria-rowindex'?: number | undefined; 'aria-rowspan'?: number | undefined; 'aria-selected'?: boolean | "false" | "true" | undefined; 'aria-setsize'?: number | undefined; 'aria-sort'?: "none" | "ascending" | "descending" | "other" | undefined; 'aria-valuemax'?: number | undefined; 'aria-valuemin'?: number | undefined; 'aria-valuenow'?: number | undefined; 'aria-valuetext'?: string | undefined; dangerouslySetInnerHTML?: { __html: string; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onError?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerEnterCapture?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerLeaveCapture?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; key?: React.Key | undefined; ref?: ((instance: HTMLSpanElement | null) => any) | React.RefObject | undefined; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + } +} + +type Params1 = { +>Params1 : Params1 +> : ^^^^^^^ + + foo: string; +>foo : string +> : ^^^^^^ + +} & ({ tag: "a"; type: number } | { tag: "b"; type: string }); +>tag : "a" +> : ^^^ +>type : number +> : ^^^^^^ +>tag : "b" +> : ^^^ +>type : string +> : ^^^^^^ + +const fn1 =

(params: P) => { +>fn1 :

(params: P) => Omit | undefined +> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>

(params: P) => { const { foo, ...rest } = params; if (rest.tag === "a") { rest.type.toFixed(); // ok return rest; // Omit } return undefined;} :

(params: P) => Omit | undefined +> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>params : P +> : ^ + + const { foo, ...rest } = params; +>foo : string +> : ^^^^^^ +>rest : Omit +> : ^^^^^^^^^^^^^^ +>params : Params1 +> : ^^^^^^^ + + if (rest.tag === "a") { +>rest.tag === "a" : boolean +> : ^^^^^^^ +>rest.tag : "a" | "b" +> : ^^^^^^^^^ +>rest : { tag: "a"; type: number; } | { tag: "b"; type: string; } +> : ^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^ ^^^ +>tag : "a" | "b" +> : ^^^^^^^^^ +>"a" : "a" +> : ^^^ + + rest.type.toFixed(); // ok +>rest.type.toFixed() : string +> : ^^^^^^ +>rest.type.toFixed : (fractionDigits?: number) => string +> : ^ ^^^ ^^^^^ +>rest.type : number +> : ^^^^^^ +>rest : { tag: "a"; type: number; } +> : ^^^^^^^ ^^^^^^^^ ^^^ +>type : number +> : ^^^^^^ +>toFixed : (fractionDigits?: number) => string +> : ^ ^^^ ^^^^^ + + return rest; // Omit +>rest : Omit +> : ^^^^^^^^^^^^^^ + } + + return undefined; +>undefined : undefined +> : ^^^^^^^^^ + +}; + +const fn2 =

({ foo, ...rest }: P) => { +>fn2 :

({ foo, ...rest }: P) => Omit | undefined +> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>

({ foo, ...rest }: P) => { if (rest.tag === "a") { rest.type.toFixed(); // ok return rest; // Omit } return undefined;} :

({ foo, ...rest }: P) => Omit | undefined +> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>foo : string +> : ^^^^^^ +>rest : Omit +> : ^^^^^^^^^^^^^^ + + if (rest.tag === "a") { +>rest.tag === "a" : boolean +> : ^^^^^^^ +>rest.tag : "a" | "b" +> : ^^^^^^^^^ +>rest : { tag: "a"; type: number; } | { tag: "b"; type: string; } +> : ^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^ ^^^ +>tag : "a" | "b" +> : ^^^^^^^^^ +>"a" : "a" +> : ^^^ + + rest.type.toFixed(); // ok +>rest.type.toFixed() : string +> : ^^^^^^ +>rest.type.toFixed : (fractionDigits?: number) => string +> : ^ ^^^ ^^^^^ +>rest.type : number +> : ^^^^^^ +>rest : { tag: "a"; type: number; } +> : ^^^^^^^ ^^^^^^^^ ^^^ +>type : number +> : ^^^^^^ +>toFixed : (fractionDigits?: number) => string +> : ^ ^^^ ^^^^^ + + return rest; // Omit +>rest : Omit +> : ^^^^^^^^^^^^^^ + } + + return undefined; +>undefined : undefined +> : ^^^^^^^^^ + +}; + +// https://github.com/microsoft/TypeScript/issues/53947 + +function ImageAvatar(props: { className?: string; src: string }) { +>ImageAvatar : (props: { className?: string; src: string; }) => null +> : ^ ^^ ^^^^^^^^^ +>props : { className?: string; src: string; } +> : ^^^^^^^^^^^^^^ ^^^^^^^ ^^^ +>className : string | undefined +> : ^^^^^^^^^^^^^^^^^^ +>src : string +> : ^^^^^^ + + return null; +} + +function InitialsAvatar(props: { className?: string; name: string }) { +>InitialsAvatar : (props: { className?: string; name: string; }) => null +> : ^ ^^ ^^^^^^^^^ +>props : { className?: string; name: string; } +> : ^^^^^^^^^^^^^^ ^^^^^^^^ ^^^ +>className : string | undefined +> : ^^^^^^^^^^^^^^^^^^ +>name : string +> : ^^^^^^ + + return null; +} + +type AvatarProps = +>AvatarProps : AvatarProps +> : ^^^^^^^^^^^ + + | { type: "image"; src: string; className: string } +>type : "image" +> : ^^^^^^^ +>src : string +> : ^^^^^^ +>className : string +> : ^^^^^^ + + | { type: "initials"; name: string; className: string }; +>type : "initials" +> : ^^^^^^^^^^ +>name : string +> : ^^^^^^ +>className : string +> : ^^^^^^ + +const Avatar = ({ type, className, ...rest }: AvatarProps) => { +>Avatar : ({ type, className, ...rest }: AvatarProps) => JSX.Element +> : ^ ^^ ^^^^^^^^^^^^^^^^ +>({ type, className, ...rest }: AvatarProps) => { if (type === "image") { return ; } if (type === "initials") { return ; } throw new Error("");} : ({ type, className, ...rest }: AvatarProps) => JSX.Element +> : ^ ^^ ^^^^^^^^^^^^^^^^ +>type : "image" | "initials" +> : ^^^^^^^^^^^^^^^^^^^^ +>className : string +> : ^^^^^^ +>rest : { src: string; } | { name: string; } +> : ^^^^^^^ ^^^^^^^^^^^^^^ ^^^ + + if (type === "image") { +>type === "image" : boolean +> : ^^^^^^^ +>type : "image" | "initials" +> : ^^^^^^^^^^^^^^^^^^^^ +>"image" : "image" +> : ^^^^^^^ + + return ; +> : JSX.Element +> : ^^^^^^^^^^^ +>ImageAvatar : (props: { className?: string; src: string; }) => null +> : ^ ^^ ^^^^^^^^^ +>className : string +> : ^^^^^^ +>className : string +> : ^^^^^^ +>rest : { src: string; } +> : ^^^^^^^ ^^^ + } + + if (type === "initials") { +>type === "initials" : boolean +> : ^^^^^^^ +>type : "initials" +> : ^^^^^^^^^^ +>"initials" : "initials" +> : ^^^^^^^^^^ + + return ; +> : JSX.Element +> : ^^^^^^^^^^^ +>InitialsAvatar : (props: { className?: string; name: string; }) => null +> : ^ ^^ ^^^^^^^^^ +>className : string +> : ^^^^^^ +>className : string +> : ^^^^^^ +>rest : { name: string; } +> : ^^^^^^^^ ^^^ + } + + throw new Error(""); +>new Error("") : Error +> : ^^^^^ +>Error : ErrorConstructor +> : ^^^^^^^^^^^^^^^^ +>"" : "" +> : ^^ + +}; + diff --git a/tests/baselines/reference/destructureContextualParameters1.symbols b/tests/baselines/reference/destructureContextualParameters1.symbols new file mode 100644 index 0000000000000..3d960d3c09630 --- /dev/null +++ b/tests/baselines/reference/destructureContextualParameters1.symbols @@ -0,0 +1,339 @@ +//// [tests/cases/compiler/destructureContextualParameters1.ts] //// + +=== destructureContextualParameters1.ts === +declare function arrayFrom(iterator: Iterable, map: (t: T) => U): U[]; +>arrayFrom : Symbol(arrayFrom, Decl(destructureContextualParameters1.ts, 0, 0), Decl(destructureContextualParameters1.ts, 0, 79)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 0, 27)) +>U : Symbol(U, Decl(destructureContextualParameters1.ts, 0, 29)) +>iterator : Symbol(iterator, Decl(destructureContextualParameters1.ts, 0, 33)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 0, 27)) +>map : Symbol(map, Decl(destructureContextualParameters1.ts, 0, 55)) +>t : Symbol(t, Decl(destructureContextualParameters1.ts, 0, 62)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 0, 27)) +>U : Symbol(U, Decl(destructureContextualParameters1.ts, 0, 29)) +>U : Symbol(U, Decl(destructureContextualParameters1.ts, 0, 29)) + +declare function arrayFrom(iterator: Iterable): T[]; +>arrayFrom : Symbol(arrayFrom, Decl(destructureContextualParameters1.ts, 0, 0), Decl(destructureContextualParameters1.ts, 0, 79)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 1, 27)) +>iterator : Symbol(iterator, Decl(destructureContextualParameters1.ts, 1, 30)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 1, 27)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 1, 27)) + +interface CommandLineOptionOfStringType { +>CommandLineOptionOfStringType : Symbol(CommandLineOptionOfStringType, Decl(destructureContextualParameters1.ts, 1, 58)) + + type: "string"; +>type : Symbol(CommandLineOptionOfStringType.type, Decl(destructureContextualParameters1.ts, 3, 41)) + + defaultValueDescription?: string | undefined; +>defaultValueDescription : Symbol(CommandLineOptionOfStringType.defaultValueDescription, Decl(destructureContextualParameters1.ts, 4, 17)) +} + +interface CommandLineOptionOfCustomType { +>CommandLineOptionOfCustomType : Symbol(CommandLineOptionOfCustomType, Decl(destructureContextualParameters1.ts, 6, 1)) + + type: Map; +>type : Symbol(CommandLineOptionOfCustomType.type, Decl(destructureContextualParameters1.ts, 8, 41)) +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + + defaultValueDescription: number | string | undefined; +>defaultValueDescription : Symbol(CommandLineOptionOfCustomType.defaultValueDescription, Decl(destructureContextualParameters1.ts, 9, 37)) + + deprecatedKeys?: Set; +>deprecatedKeys : Symbol(CommandLineOptionOfCustomType.deprecatedKeys, Decl(destructureContextualParameters1.ts, 10, 55)) +>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --)) +} + +type CommandLineOption = +>CommandLineOption : Symbol(CommandLineOption, Decl(destructureContextualParameters1.ts, 12, 1)) + + | CommandLineOptionOfStringType +>CommandLineOptionOfStringType : Symbol(CommandLineOptionOfStringType, Decl(destructureContextualParameters1.ts, 1, 58)) + + | CommandLineOptionOfCustomType; +>CommandLineOptionOfCustomType : Symbol(CommandLineOptionOfCustomType, Decl(destructureContextualParameters1.ts, 6, 1)) + +function formatDefaultValue1( +>formatDefaultValue1 : Symbol(formatDefaultValue1, Decl(destructureContextualParameters1.ts, 16, 34)) + + defaultValue: CommandLineOption["defaultValueDescription"], +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 18, 29)) +>CommandLineOption : Symbol(CommandLineOption, Decl(destructureContextualParameters1.ts, 12, 1)) + + type: CommandLineOption["type"], +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 19, 61)) +>CommandLineOption : Symbol(CommandLineOption, Decl(destructureContextualParameters1.ts, 12, 1)) + +) { + return defaultValue !== undefined && typeof type === "object" +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 18, 29)) +>undefined : Symbol(undefined) +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 19, 61)) + + ? arrayFrom(type.entries()) +>arrayFrom(type.entries()) .filter(([, value]) => value === defaultValue) .map(([name]) => name) .join : Symbol(Array.join, Decl(lib.es5.d.ts, --, --)) +>arrayFrom(type.entries()) .filter(([, value]) => value === defaultValue) .map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>arrayFrom(type.entries()) .filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>arrayFrom : Symbol(arrayFrom, Decl(destructureContextualParameters1.ts, 0, 0), Decl(destructureContextualParameters1.ts, 0, 79)) +>type.entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 19, 61)) +>entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) + + .filter(([, value]) => value === defaultValue) +>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>value : Symbol(value, Decl(destructureContextualParameters1.ts, 24, 19)) +>value : Symbol(value, Decl(destructureContextualParameters1.ts, 24, 19)) +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 18, 29)) + + .map(([name]) => name) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>name : Symbol(name, Decl(destructureContextualParameters1.ts, 25, 15)) +>name : Symbol(name, Decl(destructureContextualParameters1.ts, 25, 15)) + + .join("/") +>join : Symbol(Array.join, Decl(lib.es5.d.ts, --, --)) + + : String(defaultValue); +>String : Symbol(String, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --) ... and 7 more) +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 18, 29)) +} + +function formatDefaultValue2( +>formatDefaultValue2 : Symbol(formatDefaultValue2, Decl(destructureContextualParameters1.ts, 28, 1)) + + defaultValue: CommandLineOption["defaultValueDescription"], +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 30, 29)) +>CommandLineOption : Symbol(CommandLineOption, Decl(destructureContextualParameters1.ts, 12, 1)) + + type: CommandLineOption["type"], +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 31, 61)) +>CommandLineOption : Symbol(CommandLineOption, Decl(destructureContextualParameters1.ts, 12, 1)) + +) { + return defaultValue !== undefined && typeof type === "object" +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 30, 29)) +>undefined : Symbol(undefined) +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 31, 61)) + + ? arrayFrom(type.entries()) +>arrayFrom(type.entries()) .filter(([, ...value]) => value[0] === defaultValue) .map(([name]) => name) .join : Symbol(Array.join, Decl(lib.es5.d.ts, --, --)) +>arrayFrom(type.entries()) .filter(([, ...value]) => value[0] === defaultValue) .map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>arrayFrom(type.entries()) .filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>arrayFrom : Symbol(arrayFrom, Decl(destructureContextualParameters1.ts, 0, 0), Decl(destructureContextualParameters1.ts, 0, 79)) +>type.entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 31, 61)) +>entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) + + .filter(([, ...value]) => value[0] === defaultValue) +>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>value : Symbol(value, Decl(destructureContextualParameters1.ts, 36, 19)) +>value : Symbol(value, Decl(destructureContextualParameters1.ts, 36, 19)) +>0 : Symbol(0) +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 30, 29)) + + .map(([name]) => name) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>name : Symbol(name, Decl(destructureContextualParameters1.ts, 37, 15)) +>name : Symbol(name, Decl(destructureContextualParameters1.ts, 37, 15)) + + .join("/") +>join : Symbol(Array.join, Decl(lib.es5.d.ts, --, --)) + + : String(defaultValue); +>String : Symbol(String, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --) ... and 7 more) +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 30, 29)) +} + +function formatDefaultValue3( +>formatDefaultValue3 : Symbol(formatDefaultValue3, Decl(destructureContextualParameters1.ts, 40, 1)) + + defaultValue: CommandLineOption["defaultValueDescription"], +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 42, 29)) +>CommandLineOption : Symbol(CommandLineOption, Decl(destructureContextualParameters1.ts, 12, 1)) + + type: CommandLineOption["type"], +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 43, 61)) +>CommandLineOption : Symbol(CommandLineOption, Decl(destructureContextualParameters1.ts, 12, 1)) + +) { + return defaultValue !== undefined && typeof type === "object" +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 42, 29)) +>undefined : Symbol(undefined) +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 43, 61)) + + ? arrayFrom(type.entries()) +>arrayFrom(type.entries()) .filter((arg) => { const [, value] = arg; return value === defaultValue; }) .map(([name]) => name) .join : Symbol(Array.join, Decl(lib.es5.d.ts, --, --)) +>arrayFrom(type.entries()) .filter((arg) => { const [, value] = arg; return value === defaultValue; }) .map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>arrayFrom(type.entries()) .filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>arrayFrom : Symbol(arrayFrom, Decl(destructureContextualParameters1.ts, 0, 0), Decl(destructureContextualParameters1.ts, 0, 79)) +>type.entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 43, 61)) +>entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) + + .filter((arg) => { +>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 48, 17)) + + const [, value] = arg; +>value : Symbol(value, Decl(destructureContextualParameters1.ts, 49, 20)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 48, 17)) + + return value === defaultValue; +>value : Symbol(value, Decl(destructureContextualParameters1.ts, 49, 20)) +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 42, 29)) + + }) + .map(([name]) => name) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>name : Symbol(name, Decl(destructureContextualParameters1.ts, 52, 15)) +>name : Symbol(name, Decl(destructureContextualParameters1.ts, 52, 15)) + + .join("/") +>join : Symbol(Array.join, Decl(lib.es5.d.ts, --, --)) + + : String(defaultValue); +>String : Symbol(String, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --) ... and 7 more) +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 42, 29)) +} + +function formatDefaultValue4( +>formatDefaultValue4 : Symbol(formatDefaultValue4, Decl(destructureContextualParameters1.ts, 55, 1)) + + defaultValue: CommandLineOption["defaultValueDescription"], +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 57, 29)) +>CommandLineOption : Symbol(CommandLineOption, Decl(destructureContextualParameters1.ts, 12, 1)) + + type: CommandLineOption["type"], +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 58, 61)) +>CommandLineOption : Symbol(CommandLineOption, Decl(destructureContextualParameters1.ts, 12, 1)) + +) { + return defaultValue !== undefined && typeof type === "object" +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 57, 29)) +>undefined : Symbol(undefined) +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 58, 61)) + + ? arrayFrom(type.entries()) +>arrayFrom(type.entries()) .filter((arg) => { const [, ...value] = arg; return value[0] === defaultValue; }) .map(([name]) => name) .join : Symbol(Array.join, Decl(lib.es5.d.ts, --, --)) +>arrayFrom(type.entries()) .filter((arg) => { const [, ...value] = arg; return value[0] === defaultValue; }) .map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>arrayFrom(type.entries()) .filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>arrayFrom : Symbol(arrayFrom, Decl(destructureContextualParameters1.ts, 0, 0), Decl(destructureContextualParameters1.ts, 0, 79)) +>type.entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) +>type : Symbol(type, Decl(destructureContextualParameters1.ts, 58, 61)) +>entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) + + .filter((arg) => { +>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 63, 17)) + + const [, ...value] = arg; +>value : Symbol(value, Decl(destructureContextualParameters1.ts, 64, 20)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 63, 17)) + + return value[0] === defaultValue; +>value : Symbol(value, Decl(destructureContextualParameters1.ts, 64, 20)) +>0 : Symbol(0) +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 57, 29)) + + }) + .map(([name]) => name) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>name : Symbol(name, Decl(destructureContextualParameters1.ts, 67, 15)) +>name : Symbol(name, Decl(destructureContextualParameters1.ts, 67, 15)) + + .join("/") +>join : Symbol(Array.join, Decl(lib.es5.d.ts, --, --)) + + : String(defaultValue); +>String : Symbol(String, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --) ... and 7 more) +>defaultValue : Symbol(defaultValue, Decl(destructureContextualParameters1.ts, 57, 29)) +} + +declare function test1(arg: T): { +>test1 : Symbol(test1, Decl(destructureContextualParameters1.ts, 70, 1)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 72, 23)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 72, 26)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 72, 23)) + + filter(cb: (arg: T) => arg is S): void; +>filter : Symbol(filter, Decl(destructureContextualParameters1.ts, 72, 36), Decl(destructureContextualParameters1.ts, 73, 54)) +>S : Symbol(S, Decl(destructureContextualParameters1.ts, 73, 9)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 72, 23)) +>cb : Symbol(cb, Decl(destructureContextualParameters1.ts, 73, 22)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 73, 27)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 72, 23)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 73, 27)) +>S : Symbol(S, Decl(destructureContextualParameters1.ts, 73, 9)) + + filter(cb: (arg: T) => boolean): void; +>filter : Symbol(filter, Decl(destructureContextualParameters1.ts, 72, 36), Decl(destructureContextualParameters1.ts, 73, 54)) +>cb : Symbol(cb, Decl(destructureContextualParameters1.ts, 74, 9)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 74, 14)) +>T : Symbol(T, Decl(destructureContextualParameters1.ts, 72, 23)) + +}; + +declare const obj1: { foo: string; bar: number; baz: boolean }; +>obj1 : Symbol(obj1, Decl(destructureContextualParameters1.ts, 77, 13)) +>foo : Symbol(foo, Decl(destructureContextualParameters1.ts, 77, 21)) +>bar : Symbol(bar, Decl(destructureContextualParameters1.ts, 77, 34)) +>baz : Symbol(baz, Decl(destructureContextualParameters1.ts, 77, 47)) + +test1(obj1).filter(({ foo, bar }) => foo === ""); +>test1(obj1).filter : Symbol(filter, Decl(destructureContextualParameters1.ts, 72, 36), Decl(destructureContextualParameters1.ts, 73, 54)) +>test1 : Symbol(test1, Decl(destructureContextualParameters1.ts, 70, 1)) +>obj1 : Symbol(obj1, Decl(destructureContextualParameters1.ts, 77, 13)) +>filter : Symbol(filter, Decl(destructureContextualParameters1.ts, 72, 36), Decl(destructureContextualParameters1.ts, 73, 54)) +>foo : Symbol(foo, Decl(destructureContextualParameters1.ts, 78, 21)) +>bar : Symbol(bar, Decl(destructureContextualParameters1.ts, 78, 26)) +>foo : Symbol(foo, Decl(destructureContextualParameters1.ts, 78, 21)) + +test1(obj1).filter(({ bar, ...rest }) => rest.foo === ""); +>test1(obj1).filter : Symbol(filter, Decl(destructureContextualParameters1.ts, 72, 36), Decl(destructureContextualParameters1.ts, 73, 54)) +>test1 : Symbol(test1, Decl(destructureContextualParameters1.ts, 70, 1)) +>obj1 : Symbol(obj1, Decl(destructureContextualParameters1.ts, 77, 13)) +>filter : Symbol(filter, Decl(destructureContextualParameters1.ts, 72, 36), Decl(destructureContextualParameters1.ts, 73, 54)) +>bar : Symbol(bar, Decl(destructureContextualParameters1.ts, 79, 21)) +>rest : Symbol(rest, Decl(destructureContextualParameters1.ts, 79, 26)) +>rest.foo : Symbol(foo, Decl(destructureContextualParameters1.ts, 77, 21)) +>rest : Symbol(rest, Decl(destructureContextualParameters1.ts, 79, 26)) +>foo : Symbol(foo, Decl(destructureContextualParameters1.ts, 77, 21)) + +test1(obj1).filter((arg) => { +>test1(obj1).filter : Symbol(filter, Decl(destructureContextualParameters1.ts, 72, 36), Decl(destructureContextualParameters1.ts, 73, 54)) +>test1 : Symbol(test1, Decl(destructureContextualParameters1.ts, 70, 1)) +>obj1 : Symbol(obj1, Decl(destructureContextualParameters1.ts, 77, 13)) +>filter : Symbol(filter, Decl(destructureContextualParameters1.ts, 72, 36), Decl(destructureContextualParameters1.ts, 73, 54)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 80, 20)) + + const { foo, bar } = arg; +>foo : Symbol(foo, Decl(destructureContextualParameters1.ts, 81, 11)) +>bar : Symbol(bar, Decl(destructureContextualParameters1.ts, 81, 16)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 80, 20)) + + return foo === ""; +>foo : Symbol(foo, Decl(destructureContextualParameters1.ts, 81, 11)) + +}); +test1(obj1).filter((arg) => { +>test1(obj1).filter : Symbol(filter, Decl(destructureContextualParameters1.ts, 72, 36), Decl(destructureContextualParameters1.ts, 73, 54)) +>test1 : Symbol(test1, Decl(destructureContextualParameters1.ts, 70, 1)) +>obj1 : Symbol(obj1, Decl(destructureContextualParameters1.ts, 77, 13)) +>filter : Symbol(filter, Decl(destructureContextualParameters1.ts, 72, 36), Decl(destructureContextualParameters1.ts, 73, 54)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 84, 20)) + + const { bar, ...rest } = arg; +>bar : Symbol(bar, Decl(destructureContextualParameters1.ts, 85, 11)) +>rest : Symbol(rest, Decl(destructureContextualParameters1.ts, 85, 16)) +>arg : Symbol(arg, Decl(destructureContextualParameters1.ts, 84, 20)) + + return rest.foo === ""; +>rest.foo : Symbol(foo, Decl(destructureContextualParameters1.ts, 77, 21)) +>rest : Symbol(rest, Decl(destructureContextualParameters1.ts, 85, 16)) +>foo : Symbol(foo, Decl(destructureContextualParameters1.ts, 77, 21)) + +}); + diff --git a/tests/baselines/reference/destructureContextualParameters1.types b/tests/baselines/reference/destructureContextualParameters1.types new file mode 100644 index 0000000000000..adc2f4cd0c3e8 --- /dev/null +++ b/tests/baselines/reference/destructureContextualParameters1.types @@ -0,0 +1,641 @@ +//// [tests/cases/compiler/destructureContextualParameters1.ts] //// + +=== destructureContextualParameters1.ts === +declare function arrayFrom(iterator: Iterable, map: (t: T) => U): U[]; +>arrayFrom : { (iterator: Iterable, map: (t: T) => U): U[]; (iterator: Iterable): T_1[]; } +> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^ ^^ ^^^ ^^^ +>iterator : Iterable +> : ^^^^^^^^^^^ +>map : (t: T) => U +> : ^ ^^ ^^^^^ +>t : T +> : ^ + +declare function arrayFrom(iterator: Iterable): T[]; +>arrayFrom : { (iterator: Iterable, map: (t: T_1) => U): U[]; (iterator: Iterable): T[]; } +> : ^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^ ^^ ^^^ ^^^ +>iterator : Iterable +> : ^^^^^^^^^^^ + +interface CommandLineOptionOfStringType { + type: "string"; +>type : "string" +> : ^^^^^^^^ + + defaultValueDescription?: string | undefined; +>defaultValueDescription : string | undefined +> : ^^^^^^^^^^^^^^^^^^ +} + +interface CommandLineOptionOfCustomType { + type: Map; +>type : Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + defaultValueDescription: number | string | undefined; +>defaultValueDescription : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + deprecatedKeys?: Set; +>deprecatedKeys : Set | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^ +} + +type CommandLineOption = +>CommandLineOption : CommandLineOption +> : ^^^^^^^^^^^^^^^^^ + + | CommandLineOptionOfStringType + | CommandLineOptionOfCustomType; + +function formatDefaultValue1( +>formatDefaultValue1 : (defaultValue: CommandLineOption["defaultValueDescription"], type: CommandLineOption["type"]) => string +> : ^ ^^ ^^ ^^ ^^^^^^^^^^^ + + defaultValue: CommandLineOption["defaultValueDescription"], +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + type: CommandLineOption["type"], +>type : "string" | Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +) { + return defaultValue !== undefined && typeof type === "object" +>defaultValue !== undefined && typeof type === "object" ? arrayFrom(type.entries()) .filter(([, value]) => value === defaultValue) .map(([name]) => name) .join("/") : String(defaultValue) : string +> : ^^^^^^ +>defaultValue !== undefined && typeof type === "object" : boolean +> : ^^^^^^^ +>defaultValue !== undefined : boolean +> : ^^^^^^^ +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>undefined : undefined +> : ^^^^^^^^^ +>typeof type === "object" : boolean +> : ^^^^^^^ +>typeof type : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type : "string" | Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>"object" : "object" +> : ^^^^^^^^ + + ? arrayFrom(type.entries()) +>arrayFrom(type.entries()) .filter(([, value]) => value === defaultValue) .map(([name]) => name) .join("/") : string +> : ^^^^^^ +>arrayFrom(type.entries()) .filter(([, value]) => value === defaultValue) .map(([name]) => name) .join : (separator?: string) => string +> : ^ ^^^ ^^^^^ +>arrayFrom(type.entries()) .filter(([, value]) => value === defaultValue) .map(([name]) => name) : string[] +> : ^^^^^^^^ +>arrayFrom(type.entries()) .filter(([, value]) => value === defaultValue) .map : (callbackfn: (value: [string, string | number], index: number, array: [string, string | number][]) => U, thisArg?: any) => U[] +> : ^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ +>arrayFrom(type.entries()) .filter(([, value]) => value === defaultValue) : [string, string | number][] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom(type.entries()) .filter : { (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => value is S, thisArg?: any): S[]; (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => unknown, thisArg?: any): [string, string | number][]; } +> : ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom(type.entries()) : [string, string | number][] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom : { (iterator: Iterable, map: (t: T) => U): U[]; (iterator: Iterable): T[]; } +> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^ ^^ ^^^ ^^^ +>type.entries() : MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type.entries : () => MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type : Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>entries : () => MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + .filter(([, value]) => value === defaultValue) +>filter : { (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => value is S, thisArg?: any): S[]; (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => unknown, thisArg?: any): [string, string | number][]; } +> : ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>([, value]) => value === defaultValue : ([, value]: [string, string | number]) => boolean +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +> : undefined +> : ^^^^^^^^^ +>value : string | number +> : ^^^^^^^^^^^^^^^ +>value === defaultValue : boolean +> : ^^^^^^^ +>value : string | number +> : ^^^^^^^^^^^^^^^ +>defaultValue : string | number +> : ^^^^^^^^^^^^^^^ + + .map(([name]) => name) +>map : (callbackfn: (value: [string, string | number], index: number, array: [string, string | number][]) => U, thisArg?: any) => U[] +> : ^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ +>([name]) => name : ([name]: [string, string | number]) => string +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>name : string +> : ^^^^^^ +>name : string +> : ^^^^^^ + + .join("/") +>join : (separator?: string) => string +> : ^ ^^^ ^^^^^ +>"/" : "/" +> : ^^^ + + : String(defaultValue); +>String(defaultValue) : string +> : ^^^^^^ +>String : StringConstructor +> : ^^^^^^^^^^^^^^^^^ +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +} + +function formatDefaultValue2( +>formatDefaultValue2 : (defaultValue: CommandLineOption["defaultValueDescription"], type: CommandLineOption["type"]) => string +> : ^ ^^ ^^ ^^ ^^^^^^^^^^^ + + defaultValue: CommandLineOption["defaultValueDescription"], +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + type: CommandLineOption["type"], +>type : "string" | Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +) { + return defaultValue !== undefined && typeof type === "object" +>defaultValue !== undefined && typeof type === "object" ? arrayFrom(type.entries()) .filter(([, ...value]) => value[0] === defaultValue) .map(([name]) => name) .join("/") : String(defaultValue) : string +> : ^^^^^^ +>defaultValue !== undefined && typeof type === "object" : boolean +> : ^^^^^^^ +>defaultValue !== undefined : boolean +> : ^^^^^^^ +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>undefined : undefined +> : ^^^^^^^^^ +>typeof type === "object" : boolean +> : ^^^^^^^ +>typeof type : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type : "string" | Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>"object" : "object" +> : ^^^^^^^^ + + ? arrayFrom(type.entries()) +>arrayFrom(type.entries()) .filter(([, ...value]) => value[0] === defaultValue) .map(([name]) => name) .join("/") : string +> : ^^^^^^ +>arrayFrom(type.entries()) .filter(([, ...value]) => value[0] === defaultValue) .map(([name]) => name) .join : (separator?: string) => string +> : ^ ^^^ ^^^^^ +>arrayFrom(type.entries()) .filter(([, ...value]) => value[0] === defaultValue) .map(([name]) => name) : string[] +> : ^^^^^^^^ +>arrayFrom(type.entries()) .filter(([, ...value]) => value[0] === defaultValue) .map : (callbackfn: (value: [string, string | number], index: number, array: [string, string | number][]) => U, thisArg?: any) => U[] +> : ^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ +>arrayFrom(type.entries()) .filter(([, ...value]) => value[0] === defaultValue) : [string, string | number][] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom(type.entries()) .filter : { (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => value is S, thisArg?: any): S[]; (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => unknown, thisArg?: any): [string, string | number][]; } +> : ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom(type.entries()) : [string, string | number][] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom : { (iterator: Iterable, map: (t: T) => U): U[]; (iterator: Iterable): T[]; } +> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^ ^^ ^^^ ^^^ +>type.entries() : MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type.entries : () => MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type : Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>entries : () => MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + .filter(([, ...value]) => value[0] === defaultValue) +>filter : { (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => value is S, thisArg?: any): S[]; (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => unknown, thisArg?: any): [string, string | number][]; } +> : ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>([, ...value]) => value[0] === defaultValue : ([, ...value]: [string, string | number]) => boolean +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +> : undefined +> : ^^^^^^^^^ +>value : [string | number] +> : ^^^^^^^^^^^^^^^^^ +>value[0] === defaultValue : boolean +> : ^^^^^^^ +>value[0] : string | number +> : ^^^^^^^^^^^^^^^ +>value : [string | number] +> : ^^^^^^^^^^^^^^^^^ +>0 : 0 +> : ^ +>defaultValue : string | number +> : ^^^^^^^^^^^^^^^ + + .map(([name]) => name) +>map : (callbackfn: (value: [string, string | number], index: number, array: [string, string | number][]) => U, thisArg?: any) => U[] +> : ^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ +>([name]) => name : ([name]: [string, string | number]) => string +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>name : string +> : ^^^^^^ +>name : string +> : ^^^^^^ + + .join("/") +>join : (separator?: string) => string +> : ^ ^^^ ^^^^^ +>"/" : "/" +> : ^^^ + + : String(defaultValue); +>String(defaultValue) : string +> : ^^^^^^ +>String : StringConstructor +> : ^^^^^^^^^^^^^^^^^ +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +} + +function formatDefaultValue3( +>formatDefaultValue3 : (defaultValue: CommandLineOption["defaultValueDescription"], type: CommandLineOption["type"]) => string +> : ^ ^^ ^^ ^^ ^^^^^^^^^^^ + + defaultValue: CommandLineOption["defaultValueDescription"], +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + type: CommandLineOption["type"], +>type : "string" | Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +) { + return defaultValue !== undefined && typeof type === "object" +>defaultValue !== undefined && typeof type === "object" ? arrayFrom(type.entries()) .filter((arg) => { const [, value] = arg; return value === defaultValue; }) .map(([name]) => name) .join("/") : String(defaultValue) : string +> : ^^^^^^ +>defaultValue !== undefined && typeof type === "object" : boolean +> : ^^^^^^^ +>defaultValue !== undefined : boolean +> : ^^^^^^^ +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>undefined : undefined +> : ^^^^^^^^^ +>typeof type === "object" : boolean +> : ^^^^^^^ +>typeof type : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type : "string" | Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>"object" : "object" +> : ^^^^^^^^ + + ? arrayFrom(type.entries()) +>arrayFrom(type.entries()) .filter((arg) => { const [, value] = arg; return value === defaultValue; }) .map(([name]) => name) .join("/") : string +> : ^^^^^^ +>arrayFrom(type.entries()) .filter((arg) => { const [, value] = arg; return value === defaultValue; }) .map(([name]) => name) .join : (separator?: string) => string +> : ^ ^^^ ^^^^^ +>arrayFrom(type.entries()) .filter((arg) => { const [, value] = arg; return value === defaultValue; }) .map(([name]) => name) : string[] +> : ^^^^^^^^ +>arrayFrom(type.entries()) .filter((arg) => { const [, value] = arg; return value === defaultValue; }) .map : (callbackfn: (value: [string, string | number], index: number, array: [string, string | number][]) => U, thisArg?: any) => U[] +> : ^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ +>arrayFrom(type.entries()) .filter((arg) => { const [, value] = arg; return value === defaultValue; }) : [string, string | number][] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom(type.entries()) .filter : { (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => value is S, thisArg?: any): S[]; (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => unknown, thisArg?: any): [string, string | number][]; } +> : ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom(type.entries()) : [string, string | number][] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom : { (iterator: Iterable, map: (t: T) => U): U[]; (iterator: Iterable): T[]; } +> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^ ^^ ^^^ ^^^ +>type.entries() : MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type.entries : () => MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type : Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>entries : () => MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + .filter((arg) => { +>filter : { (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => value is S, thisArg?: any): S[]; (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => unknown, thisArg?: any): [string, string | number][]; } +> : ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(arg) => { const [, value] = arg; return value === defaultValue; } : (arg: [string, string | number]) => boolean +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arg : [string, string | number] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + + const [, value] = arg; +> : undefined +> : ^^^^^^^^^ +>value : string | number +> : ^^^^^^^^^^^^^^^ +>arg : [string, string | number] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + + return value === defaultValue; +>value === defaultValue : boolean +> : ^^^^^^^ +>value : string | number +> : ^^^^^^^^^^^^^^^ +>defaultValue : string | number +> : ^^^^^^^^^^^^^^^ + + }) + .map(([name]) => name) +>map : (callbackfn: (value: [string, string | number], index: number, array: [string, string | number][]) => U, thisArg?: any) => U[] +> : ^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ +>([name]) => name : ([name]: [string, string | number]) => string +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>name : string +> : ^^^^^^ +>name : string +> : ^^^^^^ + + .join("/") +>join : (separator?: string) => string +> : ^ ^^^ ^^^^^ +>"/" : "/" +> : ^^^ + + : String(defaultValue); +>String(defaultValue) : string +> : ^^^^^^ +>String : StringConstructor +> : ^^^^^^^^^^^^^^^^^ +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +} + +function formatDefaultValue4( +>formatDefaultValue4 : (defaultValue: CommandLineOption["defaultValueDescription"], type: CommandLineOption["type"]) => string +> : ^ ^^ ^^ ^^ ^^^^^^^^^^^ + + defaultValue: CommandLineOption["defaultValueDescription"], +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + type: CommandLineOption["type"], +>type : "string" | Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +) { + return defaultValue !== undefined && typeof type === "object" +>defaultValue !== undefined && typeof type === "object" ? arrayFrom(type.entries()) .filter((arg) => { const [, ...value] = arg; return value[0] === defaultValue; }) .map(([name]) => name) .join("/") : String(defaultValue) : string +> : ^^^^^^ +>defaultValue !== undefined && typeof type === "object" : boolean +> : ^^^^^^^ +>defaultValue !== undefined : boolean +> : ^^^^^^^ +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>undefined : undefined +> : ^^^^^^^^^ +>typeof type === "object" : boolean +> : ^^^^^^^ +>typeof type : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type : "string" | Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>"object" : "object" +> : ^^^^^^^^ + + ? arrayFrom(type.entries()) +>arrayFrom(type.entries()) .filter((arg) => { const [, ...value] = arg; return value[0] === defaultValue; }) .map(([name]) => name) .join("/") : string +> : ^^^^^^ +>arrayFrom(type.entries()) .filter((arg) => { const [, ...value] = arg; return value[0] === defaultValue; }) .map(([name]) => name) .join : (separator?: string) => string +> : ^ ^^^ ^^^^^ +>arrayFrom(type.entries()) .filter((arg) => { const [, ...value] = arg; return value[0] === defaultValue; }) .map(([name]) => name) : string[] +> : ^^^^^^^^ +>arrayFrom(type.entries()) .filter((arg) => { const [, ...value] = arg; return value[0] === defaultValue; }) .map : (callbackfn: (value: [string, string | number], index: number, array: [string, string | number][]) => U, thisArg?: any) => U[] +> : ^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ +>arrayFrom(type.entries()) .filter((arg) => { const [, ...value] = arg; return value[0] === defaultValue; }) : [string, string | number][] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom(type.entries()) .filter : { (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => value is S, thisArg?: any): S[]; (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => unknown, thisArg?: any): [string, string | number][]; } +> : ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom(type.entries()) : [string, string | number][] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arrayFrom : { (iterator: Iterable, map: (t: T) => U): U[]; (iterator: Iterable): T[]; } +> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^ ^^ ^^^ ^^^ +>type.entries() : MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type.entries : () => MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>type : Map +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>entries : () => MapIterator<[string, string | number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + .filter((arg) => { +>filter : { (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => value is S, thisArg?: any): S[]; (predicate: (value: [string, string | number], index: number, array: [string, string | number][]) => unknown, thisArg?: any): [string, string | number][]; } +> : ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(arg) => { const [, ...value] = arg; return value[0] === defaultValue; } : (arg: [string, string | number]) => boolean +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>arg : [string, string | number] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + + const [, ...value] = arg; +> : undefined +> : ^^^^^^^^^ +>value : [string | number] +> : ^^^^^^^^^^^^^^^^^ +>arg : [string, string | number] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + + return value[0] === defaultValue; +>value[0] === defaultValue : boolean +> : ^^^^^^^ +>value[0] : string | number +> : ^^^^^^^^^^^^^^^ +>value : [string | number] +> : ^^^^^^^^^^^^^^^^^ +>0 : 0 +> : ^ +>defaultValue : string | number +> : ^^^^^^^^^^^^^^^ + + }) + .map(([name]) => name) +>map : (callbackfn: (value: [string, string | number], index: number, array: [string, string | number][]) => U, thisArg?: any) => U[] +> : ^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ +>([name]) => name : ([name]: [string, string | number]) => string +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>name : string +> : ^^^^^^ +>name : string +> : ^^^^^^ + + .join("/") +>join : (separator?: string) => string +> : ^ ^^^ ^^^^^ +>"/" : "/" +> : ^^^ + + : String(defaultValue); +>String(defaultValue) : string +> : ^^^^^^ +>String : StringConstructor +> : ^^^^^^^^^^^^^^^^^ +>defaultValue : string | number | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +} + +declare function test1(arg: T): { +>test1 : (arg: T) => { filter(cb: (arg: T) => arg is S): void; filter(cb: (arg: T) => boolean): void; } +> : ^ ^^ ^^ ^^^^^ +>arg : T +> : ^ + + filter(cb: (arg: T) => arg is S): void; +>filter : { (cb: (arg: T) => arg is S): void; (cb: (arg: T) => boolean): void; } +> : ^^^ ^^^^^^^^^ ^^ ^^ ^^^ ^^^ ^^ ^^^ ^^^ +>cb : (arg: T) => arg is S +> : ^ ^^ ^^^^^ +>arg : T +> : ^ + + filter(cb: (arg: T) => boolean): void; +>filter : { (cb: (arg: T) => arg is S): void; (cb: (arg: T) => boolean): void; } +> : ^^^ ^^^^^^^^^ ^^ ^^ ^^^ ^^^ ^^ ^^^ ^^^ +>cb : (arg: T) => boolean +> : ^ ^^ ^^^^^ +>arg : T +> : ^ + +}; + +declare const obj1: { foo: string; bar: number; baz: boolean }; +>obj1 : { foo: string; bar: number; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^ +>foo : string +> : ^^^^^^ +>bar : number +> : ^^^^^^ +>baz : boolean +> : ^^^^^^^ + +test1(obj1).filter(({ foo, bar }) => foo === ""); +>test1(obj1).filter(({ foo, bar }) => foo === "") : void +> : ^^^^ +>test1(obj1).filter : { (cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; (cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>test1(obj1) : { filter(cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; filter(cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>test1 : (arg: T) => { filter(cb: (arg: T) => arg is S): void; filter(cb: (arg: T) => boolean): void; } +> : ^ ^^ ^^ ^^^^^ +>obj1 : { foo: string; bar: number; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^ +>filter : { (cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; (cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>({ foo, bar }) => foo === "" : ({ foo, bar }: { foo: string; bar: number; baz: boolean; }) => boolean +> : ^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^ +>foo : string +> : ^^^^^^ +>bar : number +> : ^^^^^^ +>foo === "" : boolean +> : ^^^^^^^ +>foo : string +> : ^^^^^^ +>"" : "" +> : ^^ + +test1(obj1).filter(({ bar, ...rest }) => rest.foo === ""); +>test1(obj1).filter(({ bar, ...rest }) => rest.foo === "") : void +> : ^^^^ +>test1(obj1).filter : { (cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; (cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>test1(obj1) : { filter(cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; filter(cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>test1 : (arg: T) => { filter(cb: (arg: T) => arg is S): void; filter(cb: (arg: T) => boolean): void; } +> : ^ ^^ ^^ ^^^^^ +>obj1 : { foo: string; bar: number; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^ +>filter : { (cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; (cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>({ bar, ...rest }) => rest.foo === "" : ({ bar, ...rest }: { foo: string; bar: number; baz: boolean; }) => boolean +> : ^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^ +>bar : number +> : ^^^^^^ +>rest : { foo: string; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^ +>rest.foo === "" : boolean +> : ^^^^^^^ +>rest.foo : string +> : ^^^^^^ +>rest : { foo: string; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^ +>foo : string +> : ^^^^^^ +>"" : "" +> : ^^ + +test1(obj1).filter((arg) => { +>test1(obj1).filter((arg) => { const { foo, bar } = arg; return foo === "";}) : void +> : ^^^^ +>test1(obj1).filter : { (cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; (cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>test1(obj1) : { filter(cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; filter(cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>test1 : (arg: T) => { filter(cb: (arg: T) => arg is S): void; filter(cb: (arg: T) => boolean): void; } +> : ^ ^^ ^^ ^^^^^ +>obj1 : { foo: string; bar: number; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^ +>filter : { (cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; (cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>(arg) => { const { foo, bar } = arg; return foo === "";} : (arg: { foo: string; bar: number; baz: boolean; }) => boolean +> : ^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^ +>arg : { foo: string; bar: number; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^ + + const { foo, bar } = arg; +>foo : string +> : ^^^^^^ +>bar : number +> : ^^^^^^ +>arg : { foo: string; bar: number; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^ + + return foo === ""; +>foo === "" : boolean +> : ^^^^^^^ +>foo : string +> : ^^^^^^ +>"" : "" +> : ^^ + +}); +test1(obj1).filter((arg) => { +>test1(obj1).filter((arg) => { const { bar, ...rest } = arg; return rest.foo === "";}) : void +> : ^^^^ +>test1(obj1).filter : { (cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; (cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>test1(obj1) : { filter(cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; filter(cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>test1 : (arg: T) => { filter(cb: (arg: T) => arg is S): void; filter(cb: (arg: T) => boolean): void; } +> : ^ ^^ ^^ ^^^^^ +>obj1 : { foo: string; bar: number; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^ +>filter : { (cb: (arg: { foo: string; bar: number; baz: boolean; }) => arg is S): void; (cb: (arg: { foo: string; bar: number; baz: boolean; }) => boolean): void; } +> : ^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^ ^^^ ^^^ +>(arg) => { const { bar, ...rest } = arg; return rest.foo === "";} : (arg: { foo: string; bar: number; baz: boolean; }) => boolean +> : ^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^ +>arg : { foo: string; bar: number; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^ + + const { bar, ...rest } = arg; +>bar : number +> : ^^^^^^ +>rest : { foo: string; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^ +>arg : { foo: string; bar: number; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^ + + return rest.foo === ""; +>rest.foo === "" : boolean +> : ^^^^^^^ +>rest.foo : string +> : ^^^^^^ +>rest : { foo: string; baz: boolean; } +> : ^^^^^^^ ^^^^^^^ ^^^ +>foo : string +> : ^^^^^^ +>"" : "" +> : ^^ + +}); + diff --git a/tests/baselines/reference/genericObjectSpreadResultInSwitch2.symbols b/tests/baselines/reference/genericObjectSpreadResultInSwitch2.symbols new file mode 100644 index 0000000000000..fa19c6f8865b1 --- /dev/null +++ b/tests/baselines/reference/genericObjectSpreadResultInSwitch2.symbols @@ -0,0 +1,58 @@ +//// [tests/cases/compiler/genericObjectSpreadResultInSwitch2.ts] //// + +=== genericObjectSpreadResultInSwitch2.ts === +type Params = { +>Params : Symbol(Params, Decl(genericObjectSpreadResultInSwitch2.ts, 0, 0)) + + foo: string; +>foo : Symbol(foo, Decl(genericObjectSpreadResultInSwitch2.ts, 0, 15)) + +} & ({ tag: "a"; type: number } | { tag: "b"; type: string }); +>tag : Symbol(tag, Decl(genericObjectSpreadResultInSwitch2.ts, 2, 6)) +>type : Symbol(type, Decl(genericObjectSpreadResultInSwitch2.ts, 2, 16)) +>tag : Symbol(tag, Decl(genericObjectSpreadResultInSwitch2.ts, 2, 35)) +>type : Symbol(type, Decl(genericObjectSpreadResultInSwitch2.ts, 2, 45)) + +const getType =

({ foo, ...rest }: P) => { +>getType : Symbol(getType, Decl(genericObjectSpreadResultInSwitch2.ts, 4, 5)) +>P : Symbol(P, Decl(genericObjectSpreadResultInSwitch2.ts, 4, 17)) +>Params : Symbol(Params, Decl(genericObjectSpreadResultInSwitch2.ts, 0, 0)) +>foo : Symbol(foo, Decl(genericObjectSpreadResultInSwitch2.ts, 4, 36)) +>rest : Symbol(rest, Decl(genericObjectSpreadResultInSwitch2.ts, 4, 41)) +>P : Symbol(P, Decl(genericObjectSpreadResultInSwitch2.ts, 4, 17)) + + return rest; +>rest : Symbol(rest, Decl(genericObjectSpreadResultInSwitch2.ts, 4, 41)) + +}; + +declare const params: Params; +>params : Symbol(params, Decl(genericObjectSpreadResultInSwitch2.ts, 8, 13)) +>Params : Symbol(Params, Decl(genericObjectSpreadResultInSwitch2.ts, 0, 0)) + +switch (params.tag) { +>params.tag : Symbol(tag, Decl(genericObjectSpreadResultInSwitch2.ts, 2, 6), Decl(genericObjectSpreadResultInSwitch2.ts, 2, 35)) +>params : Symbol(params, Decl(genericObjectSpreadResultInSwitch2.ts, 8, 13)) +>tag : Symbol(tag, Decl(genericObjectSpreadResultInSwitch2.ts, 2, 6), Decl(genericObjectSpreadResultInSwitch2.ts, 2, 35)) + + case 'a': { + const result = getType(params).type; // number +>result : Symbol(result, Decl(genericObjectSpreadResultInSwitch2.ts, 12, 13)) +>getType(params).type : Symbol(type, Decl(genericObjectSpreadResultInSwitch2.ts, 2, 16)) +>getType : Symbol(getType, Decl(genericObjectSpreadResultInSwitch2.ts, 4, 5)) +>params : Symbol(params, Decl(genericObjectSpreadResultInSwitch2.ts, 8, 13)) +>type : Symbol(type, Decl(genericObjectSpreadResultInSwitch2.ts, 2, 16)) + + break; + } + case 'b': { + const result = getType(params).type; // string +>result : Symbol(result, Decl(genericObjectSpreadResultInSwitch2.ts, 17, 13)) +>getType(params).type : Symbol(type, Decl(genericObjectSpreadResultInSwitch2.ts, 2, 45)) +>getType : Symbol(getType, Decl(genericObjectSpreadResultInSwitch2.ts, 4, 5)) +>params : Symbol(params, Decl(genericObjectSpreadResultInSwitch2.ts, 8, 13)) +>type : Symbol(type, Decl(genericObjectSpreadResultInSwitch2.ts, 2, 45)) + + break; + } +} diff --git a/tests/baselines/reference/genericObjectSpreadResultInSwitch2.types b/tests/baselines/reference/genericObjectSpreadResultInSwitch2.types new file mode 100644 index 0000000000000..fe0788d0d6add --- /dev/null +++ b/tests/baselines/reference/genericObjectSpreadResultInSwitch2.types @@ -0,0 +1,90 @@ +//// [tests/cases/compiler/genericObjectSpreadResultInSwitch2.ts] //// + +=== genericObjectSpreadResultInSwitch2.ts === +type Params = { +>Params : Params +> : ^^^^^^ + + foo: string; +>foo : string +> : ^^^^^^ + +} & ({ tag: "a"; type: number } | { tag: "b"; type: string }); +>tag : "a" +> : ^^^ +>type : number +> : ^^^^^^ +>tag : "b" +> : ^^^ +>type : string +> : ^^^^^^ + +const getType =

({ foo, ...rest }: P) => { +>getType :

({ foo, ...rest }: P) => Omit +> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^ +>

({ foo, ...rest }: P) => { return rest;} :

({ foo, ...rest }: P) => Omit +> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^ +>foo : string +> : ^^^^^^ +>rest : Omit +> : ^^^^^^^^^^^^^^ + + return rest; +>rest : Omit +> : ^^^^^^^^^^^^^^ + +}; + +declare const params: Params; +>params : Params +> : ^^^^^^ + +switch (params.tag) { +>params.tag : "a" | "b" +> : ^^^^^^^^^ +>params : Params +> : ^^^^^^ +>tag : "a" | "b" +> : ^^^^^^^^^ + + case 'a': { +>'a' : "a" +> : ^^^ + + const result = getType(params).type; // number +>result : number +> : ^^^^^^ +>getType(params).type : number +> : ^^^^^^ +>getType(params) : Omit<{ foo: string; } & { tag: "a"; type: number; }, "foo"> +> : ^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^ +>getType :

({ foo, ...rest }: P) => Omit +> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^ +>params : { foo: string; } & { tag: "a"; type: number; } +> : ^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^ ^^^ +>type : number +> : ^^^^^^ + + break; + } + case 'b': { +>'b' : "b" +> : ^^^ + + const result = getType(params).type; // string +>result : string +> : ^^^^^^ +>getType(params).type : string +> : ^^^^^^ +>getType(params) : Omit<{ foo: string; } & { tag: "b"; type: string; }, "foo"> +> : ^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^ +>getType :

({ foo, ...rest }: P) => Omit +> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^ +>params : { foo: string; } & { tag: "b"; type: string; } +> : ^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^ ^^^ +>type : string +> : ^^^^^^ + + break; + } +} diff --git a/tests/cases/compiler/destructureContextualParameters1.ts b/tests/cases/compiler/destructureContextualParameters1.ts new file mode 100644 index 0000000000000..56f2a9b2e66c0 --- /dev/null +++ b/tests/cases/compiler/destructureContextualParameters1.ts @@ -0,0 +1,92 @@ +// @strict: true +// @lib: esnext +// @noEmit: true + +declare function arrayFrom(iterator: Iterable, map: (t: T) => U): U[]; +declare function arrayFrom(iterator: Iterable): T[]; + +interface CommandLineOptionOfStringType { + type: "string"; + defaultValueDescription?: string | undefined; +} + +interface CommandLineOptionOfCustomType { + type: Map; + defaultValueDescription: number | string | undefined; + deprecatedKeys?: Set; +} + +type CommandLineOption = + | CommandLineOptionOfStringType + | CommandLineOptionOfCustomType; + +function formatDefaultValue1( + defaultValue: CommandLineOption["defaultValueDescription"], + type: CommandLineOption["type"], +) { + return defaultValue !== undefined && typeof type === "object" + ? arrayFrom(type.entries()) + .filter(([, value]) => value === defaultValue) + .map(([name]) => name) + .join("/") + : String(defaultValue); +} + +function formatDefaultValue2( + defaultValue: CommandLineOption["defaultValueDescription"], + type: CommandLineOption["type"], +) { + return defaultValue !== undefined && typeof type === "object" + ? arrayFrom(type.entries()) + .filter(([, ...value]) => value[0] === defaultValue) + .map(([name]) => name) + .join("/") + : String(defaultValue); +} + +function formatDefaultValue3( + defaultValue: CommandLineOption["defaultValueDescription"], + type: CommandLineOption["type"], +) { + return defaultValue !== undefined && typeof type === "object" + ? arrayFrom(type.entries()) + .filter((arg) => { + const [, value] = arg; + return value === defaultValue; + }) + .map(([name]) => name) + .join("/") + : String(defaultValue); +} + +function formatDefaultValue4( + defaultValue: CommandLineOption["defaultValueDescription"], + type: CommandLineOption["type"], +) { + return defaultValue !== undefined && typeof type === "object" + ? arrayFrom(type.entries()) + .filter((arg) => { + const [, ...value] = arg; + return value[0] === defaultValue; + }) + .map(([name]) => name) + .join("/") + : String(defaultValue); +} + +declare function test1(arg: T): { + filter(cb: (arg: T) => arg is S): void; + filter(cb: (arg: T) => boolean): void; +}; + +declare const obj1: { foo: string; bar: number; baz: boolean }; +test1(obj1).filter(({ foo, bar }) => foo === ""); +test1(obj1).filter(({ bar, ...rest }) => rest.foo === ""); +test1(obj1).filter((arg) => { + const { foo, bar } = arg; + return foo === ""; +}); +test1(obj1).filter((arg) => { + const { bar, ...rest } = arg; + return rest.foo === ""; +}); diff --git a/tests/cases/compiler/genericObjectSpreadResultInSwitch2.ts b/tests/cases/compiler/genericObjectSpreadResultInSwitch2.ts new file mode 100644 index 0000000000000..1d2306ffc08a2 --- /dev/null +++ b/tests/cases/compiler/genericObjectSpreadResultInSwitch2.ts @@ -0,0 +1,25 @@ +// @strict: true +// @noEmit: true + +type Params = { + foo: string; +} & ({ tag: "a"; type: number } | { tag: "b"; type: string }); + +const getType =

({ foo, ...rest }: P) => { + return rest; +}; + +declare const params: Params; + +switch (params.tag) { + case 'a': { + const result = getType(params).type; // number + + break; + } + case 'b': { + const result = getType(params).type; // string + + break; + } +} \ No newline at end of file diff --git a/tests/cases/conformance/controlFlow/dependentDestructuredRestVariables1.tsx b/tests/cases/conformance/controlFlow/dependentDestructuredRestVariables1.tsx new file mode 100644 index 0000000000000..ee3f62c9ea6a3 --- /dev/null +++ b/tests/cases/conformance/controlFlow/dependentDestructuredRestVariables1.tsx @@ -0,0 +1,96 @@ +// @strict: true +// @jsx: react +// @esModuleInterop: true +// @lib: esnext, dom +// @noEmit: true + +/// + +import React from "react"; + +// https://github.com/microsoft/TypeScript/issues/46680 + +type Action1 = { kind: "A"; payload: number } | { kind: "B"; payload: string }; + +function example1({ kind, ...rest }: Action1) { + if (kind === "A") { + rest.payload.toFixed(); + } + if (kind === "B") { + rest.payload.toUpperCase(); + } +} + +type Action2 = [kind: "A", payload: number] | [kind: "B", payload: string]; + +function example2([kind, ...rest]: Action2) { + if (kind === "A") { + rest[0].toFixed(); + } + if (kind === "B") { + rest[0].toUpperCase(); + } +} + +type Props1 = + | ({ as: "div" } & React.ComponentPropsWithRef<"div">) + | ({ as: "span" } & React.ComponentPropsWithRef<"span">); + +function MyComponent1({ as, ...rest }: Props1) { + if (as === "div") { + return

; + } + if (as === "span") { + return ; + } +} + +type Params1 = { + foo: string; +} & ({ tag: "a"; type: number } | { tag: "b"; type: string }); + +const fn1 =

(params: P) => { + const { foo, ...rest } = params; + + if (rest.tag === "a") { + rest.type.toFixed(); // ok + return rest; // Omit + } + + return undefined; +}; + +const fn2 =

({ foo, ...rest }: P) => { + if (rest.tag === "a") { + rest.type.toFixed(); // ok + return rest; // Omit + } + + return undefined; +}; + +// https://github.com/microsoft/TypeScript/issues/53947 + +function ImageAvatar(props: { className?: string; src: string }) { + return null; +} + +function InitialsAvatar(props: { className?: string; name: string }) { + return null; +} + +type AvatarProps = + | { type: "image"; src: string; className: string } + | { type: "initials"; name: string; className: string }; + +const Avatar = ({ type, className, ...rest }: AvatarProps) => { + if (type === "image") { + return ; + } + + if (type === "initials") { + return ; + } + + throw new Error(""); +};